我在使用泛型时,对于多态的工作原理感到困惑。例如,我定义了以下程序:
public interface IMyInterface
{
void MyMethod();
}
public class MyClass : IMyInterface
{
public void MyMethod()
{
}
}
public class MyContainer<T> where T : IMyInterface
{
public IList<T> Contents;
}
我可以这样做,这个方法完全可行:
MyContainer<MyClass> container = new MyContainer<MyClass>();
container.Contents.Add(new MyClass());
我有很多实现了MyInterface的类。我想编写一个方法,可以接受所有MyContainer对象:
public void CallAllMethodsInContainer(MyContainer<IMyInterface> container)
{
foreach (IMyInterface myClass in container.Contents)
{
myClass.MyMethod();
}
}
现在,我想调用这个方法。
MyContainer<MyClass> container = new MyContainer<MyClass>();
container.Contents.Add(new MyClass());
this.CallAllMethodsInContainer(container);
这不起作用。因为MyClass实现了IMyInterface,所以我应该能够直接将其转换吗?
MyContainer<IMyInterface> newContainer = (MyContainer<IMyInterface>)container;
这也行不通。我可以将普通的MyClass转换为IMyInterface:
MyClass newClass = new MyClass();
IMyInterface myInterface = (IMyInterface)newClass;
所以,至少我并没有完全误解这一点。我不确定该如何编写一个接受符合相同接口的通用类集合的方法。
如果需要的话,我有一个完全绕过这个问题的计划,但我真的更希望能够正常地完成它。
提前感谢您。