And*_*son 3 c# generics inheritance
我在使用泛型设置继承时遇到问题.
本质上我想要做的是拥有一个本身接受接口的通用接口.棘手的部分是"内部"界面可以在其上面分层更具体的界面.
以下是我正在尝试构建的结构的代表性示例:
public interface IThing { }
public interface IMoreSpecificThing : IThing { }
public interface IWidget<T> where T : IThing { }
public class MySpecificThing : IMoreSpecificThing { }
public class MyWidget : IWidget<MySpecificThing> { }
public class MyClass
{
public IWidget<IThing> MyProperty { get; set; }
public MyClass()
{
MyProperty = new MyWidget();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我将MyWidget分配给MyProperty时,我收到以下错误:
无法隐式转换
'MyWidget'为'IWidget<IThing>'.存在显式转换(您是否错过了演员?)
我做错了什么,有没有办法正确地做到这一点?
Ree*_*sey 11
这需要使您的界面协变:
public interface IWidget<out T> where T : IThing { }
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅泛型中的协方差和逆变.请注意,这确实对接口施加了限制,主要是:
这些接口的所有类型参数都是协变的,因此类型参数仅用于成员的返回类型.