[英]Using variance to convert a parent class (ObservableCollection) to a child
在我尝试这样做之前,我以为我知道它是如何工作的。 但是,以下代码引发异常。 因为TestOC
是ObservableCollection
的子级,所以我认为我可以这样做:
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;
}
}
引发的错误是:
无法将类型为'System.Collections.ObjectModel.ObservableCollection`1 [ConsoleApplication17.MyClass]'的对象转换为类型为'ConsoleApplication17.TestOC'的对象。
如何在这里获取ObservableCollection
分配给我的子班?
您不能将ObservableCollection<MyClass>
TestOC
为TestOC
。
因为是派生的。 含义TestOC
扩展了ObservableCollection<MyClass>
。 因此,如果要将ObservableCollection<MyClass>
TestOC
为TestOC
,则它将缺少TestOC
添加的功能。 (即使子类没有多余的东西)
但是您可以将TestOC
转换为ObservableCollection<MyClass>
。 因为TestOC
确实实现了ObservableCollection<MyClass>
实现的所有内容。
这不起作用 :
TestOC test2 = new ObservableCollection<MyClass>();
这确实有效 :
ObservableCollection<MyClass> test2 = new TestOC();
如何在这里获取ObservableCollection分配给我的子班?
您不能,但是有一些选择:
1-应该构造一个TestOC
,而不是创建ObservableCollection<MyClass>
。 (新的TestOC())
2-如果您不想编写ObservableCollection<MyClass>
但要编写一个较短的版本,则可以使用alias ,但这不会添加任何功能。 这只是语法糖。 这样,您可以new
一个TestOC,但在其后面是一个ObservableCollection<MyClass>
因此可以完全分配。
using TestOC = System.Collections.ObjectModel.ObservableCollection<MyClass>;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.