3

可能重复:
为什么 C# 4.0 中的类没有通用差异?

作为一名新手程序员,我有几个关于 .NET 4 的变化的问题。与其说是它是如何工作的,不如说是为什么某些东西没有变化,以及其他人是否会觉得这很有用。

问题一:

我知道接口和委托在 .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 中不允许这样做的见解将不胜感激。

4

1 回答 1

4

Eric Lippert在这里回答了您问题的第一部分

至于您问题的第二部分,C# 和 VB.NET 都要求返回类型协方差 - 但是相对于其他语言功能,它尚未得到足够高的优先级以使其进入任何版本。如果我没记错的话,这个特性还需要对 CLR 进行适当的更改。

至于为什么会这样,我将引导 Eric Lippert 片刻,并回答说不实现一个特性是免费的,而实现一个特性需要预算和时间来设计、开发、测试和记录它......这是不是免费的。一项功能必须对足够多的人具有足够的价值,以证明创建它的费用是合理的。

于 2010-05-27T14:35:57.313 回答