我有两个类,MyClassA和MyClassB。 MyClassB继承自MyClassA。我写了一个方法,其签名如下:
public void DoSomething(MyGeneric<MyClassA> obj);
我还有以下的事件处理程序。
public void MyEventHandler(Object source, EventArgs e)
{
//source is of type MyGeneric<MyClassB>
DoSomething((MyGeneric<MyClassA>)obj);
}
我知道
MyGeneric<MyClassA>
和MyGeneric<MyClassB>
不是同一类型,但既然MyClassB是MyClassA的子类,是否还有办法使它们能够工作?具体错误信息如下:
无法将类型为'MSUA.GraphViewer.GraphControls.TreeNode
1[MSUA.GraphViewer.GraphControls.MaterialConfigControl]'的对象强制转换为类型'MSUA.GraphViewer.GraphControls.TreeNode
1[MSUA.GraphViewer.PopulatableControl]'。
IEnumerable<out T>
在T
上是协变的(请参见下面我的答案)。不幸的是,这仅适用于.NET 4.0。在.NET 3.5中,该代码将无法编译。 - InBetween