使用方差将 parent class (ObservableCollection) 转换为 child
Using variance to convert a parent class (ObservableCollection) to a child
在我尝试这样做之前,我认为我知道它是如何工作的;但是,以下代码会引发异常。因为 TestOC
是 ObservableCollection
的 child,我想我可以这样做:
class MyClass
{
public string MyProperty { get; set; }
}
class TestOC : ObservableCollection<MyClass>
{
}
class Program
{
static void Main(string[] args)
{
ObservableCollection<MyClass> test = new ObservableCollection<MyClass>();
test.Add(new MyClass());
TestOC test2 = (TestOC)test;
}
}
抛出的错误是:
Unable to cast object of type 'System.Collections.ObjectModel.ObservableCollection`1[ConsoleApplication17.MyClass]' to type 'ConsoleApplication17.TestOC'.
如何让 ObservableCollection
在这里分配给我的 child class?
您不能将 ObservableCollection<MyClass>
转换为 TestOC
。
因为是派生的。意思是 TestOC
扩展 ObservableCollection<MyClass>
。因此,如果您想将 ObservableCollection<MyClass>
转换为 TestOC
,它会缺少 TestOC
添加的功能。 (即使子类没有任何额外的东西)
但是 您可以将 TestOC
转换为 ObservableCollection<MyClass>
。因为 TestOC
确实实现了 ObservableCollection<MyClass>
实现的所有功能。
这不行:
TestOC test2 = new ObservableCollection<MyClass>();
这确实有效:
ObservableCollection<MyClass> test2 = new TestOC();
How can I get the ObservableCollection to assign to my child class here?
你不能,但有一些选择:
1 - 与其创建 ObservableCollection<MyClass>
,不如构建 TestOC
。 (new TestOC())
2 - 如果您不想写 ObservableCollection<MyClass>
而是更短的版本,您可以使用 aliases,但这不会添加任何功能。这只是语法糖。这样你就可以 new
一个 TestOC 但在它后面是一个 ObservableCollection<MyClass>
所以完全可以分配。
using TestOC = System.Collections.ObjectModel.ObservableCollection<MyClass>;
在我尝试这样做之前,我认为我知道它是如何工作的;但是,以下代码会引发异常。因为 TestOC
是 ObservableCollection
的 child,我想我可以这样做:
class MyClass
{
public string MyProperty { get; set; }
}
class TestOC : ObservableCollection<MyClass>
{
}
class Program
{
static void Main(string[] args)
{
ObservableCollection<MyClass> test = new ObservableCollection<MyClass>();
test.Add(new MyClass());
TestOC test2 = (TestOC)test;
}
}
抛出的错误是:
Unable to cast object of type 'System.Collections.ObjectModel.ObservableCollection`1[ConsoleApplication17.MyClass]' to type 'ConsoleApplication17.TestOC'.
如何让 ObservableCollection
在这里分配给我的 child class?
您不能将 ObservableCollection<MyClass>
转换为 TestOC
。
因为是派生的。意思是 TestOC
扩展 ObservableCollection<MyClass>
。因此,如果您想将 ObservableCollection<MyClass>
转换为 TestOC
,它会缺少 TestOC
添加的功能。 (即使子类没有任何额外的东西)
但是 您可以将 TestOC
转换为 ObservableCollection<MyClass>
。因为 TestOC
确实实现了 ObservableCollection<MyClass>
实现的所有功能。
这不行:
TestOC test2 = new ObservableCollection<MyClass>();
这确实有效:
ObservableCollection<MyClass> test2 = new TestOC();
How can I get the ObservableCollection to assign to my child class here?
你不能,但有一些选择:
1 - 与其创建 ObservableCollection<MyClass>
,不如构建 TestOC
。 (new TestOC())
2 - 如果您不想写 ObservableCollection<MyClass>
而是更短的版本,您可以使用 aliases,但这不会添加任何功能。这只是语法糖。这样你就可以 new
一个 TestOC 但在它后面是一个 ObservableCollection<MyClass>
所以完全可以分配。
using TestOC = System.Collections.ObjectModel.ObservableCollection<MyClass>;