显式铸造问题
// The Structure of the Container and the items public interface IContainer where TItem : IItem { } public class AContainer : IContainer { } public interface IItem { } public class ItemA : IItem { } // Client app [Test] public void Test () { IContainer container = new AContainer(); }
问题:在测试中发生以下错误。 什么可以成为铸造的解决方案?
无法隐式将“AContainer”类型转换为“IContainer”。 存在显式转换(您是否错过了演员?)
另一个generics协变问题……
.NET中的generics类型不是协变或逆变 – IContainer
如果您想使用AContainer
作为IContainer
,您还需要实现此接口:
public class AContainer : IContainer, IContainer
您可以明确地实现它。
您还可以考虑Krzysztof Cwalina的.NET Generics的模拟协方差