为什么我需要协方差接口(输出类型)?

我只需要再次使用covariant outgenerics修饰符。 我有一个generics类的类,想要添加一个但是VS告诉我这只能在接口上实现。

但为什么我只能在界面上使用out修饰符呢?

我帮助自己创建了我的类的接口副本,但这对我来说似乎有点奇怪,只有一个接口,所以我可以使用这个修饰符。

确保类的定义实际上是协变的是非常困难的。 编译器更容易确保接口实际上是协变的。

使用类,只需使用generics类型的字段立即强制generics参数不变,因为就编译器而言,可以读取和修改该值。 虽然类可能支持方差,但在实践中,它需要应用于开发人员实际使用它的约束将是非常困难的,远远超过简单地创建包装接口。

我们来看一个简单的例子:

 public interface IWrapper { T Value { get; } } public class Wrapper : IWrapper { public Wrapper(T value) { Value = value; } public T Value { get; private set; } } 

上面显示的类与T (直到你将其转换为接口)。 它接受类型为T的输入值(通过构造函数)。 该接口只能是协变的,因为构造函数不是通过接口公开的。