可能重复:
Why isn’t there generic variance for classes in C# 4.0?
作为一名新手程序员,我对.NET 4中的差异有几个问题。关于它是如何工作的,不仅仅是为什么某些东西不是变体,如果其他人会发现它有用。
问题1:
我知道.NET 4中的接口和委托可以是协变/逆变,但为什么不是类?所以,问题1:
List(of BaseClass) = List(of DerivedClass)
这有点不安全吗?这不会有用吗?
问题2:
问题2来自问题1,但可能更多地涉及签名而不是方差。假设我有一个带有MustOverride成员的MustInherit类:
Public MustInherit Class TestBase
Public MustOverride Property SomeClass as BaseClass
End Class
在派生类中,为什么我不能覆盖SomeClass并返回Derived Class of BaseClass?这不安全吗?只是签名不检查继承关系吗?
Public Class TestSpecific
Inherits TestBase
Public Overrides Property SomeClass as DerivedClass
End Class
任何关于为什么在.NET 4中不允许这样做的见解将不胜感激。
答案 0 :(得分:4)
Eric Lippert answers the first part of you question here。
至于你问题的第二部分,已经为C#和VB.NET请求了返回类型协方差 - 但是相对于其他语言功能,它还没有被优先考虑到足以使其进入任何版本。如果我没记错的话,这个功能还需要对CLR进行适当的更改。
至于为什么会这样,我会告诉Eric Lippert片刻并回答说没有实现功能是免费的,而实现功能需要预算和时间来设计,开发,测试和记录它。这不是免费的。一个特征必须足以让足够多的人证明创造它的费用是合理的。