可能重複:
Why isn’t there generic variance for classes in C# 4.0?爲什麼.NET 4中的類不是協變的?
作爲新人程序員,我有一對夫婦約方差.NET 4與其說它是如何工作的,問題偏偏有些事情是不是變體,如果其他人會覺得這有用。
問題1:
我知道,接口和委託可協變/逆變.NET 4的,但爲什麼不類?所以,問題1:
List(of BaseClass) = List(of DerivedClass)
這是不是安全嗎?這不會有用嗎?
問題2:
問題2從問題1以下,但可能與簽名不是方差成交多。假設我有一個爲MustInherit類與MustOverride成員:
Public MustInherit Class TestBase
Public MustOverride Property SomeClass as BaseClass
End Class
在派生類中,我爲什麼不能覆蓋SomeClass的,並返回一個派生類BaseClass的?這是不安全的嗎?只是簽名不檢查繼承關係嗎?
Public Class TestSpecific
Inherits TestBase
Public Overrides Property SomeClass as DerivedClass
End Class
任何有關爲什麼這是不允許在.NET 4的洞察力,將不勝感激。
要回答你的第二個問題(因爲問題在我回答時已經關閉):你可以通過向基類添加一些泛型來做到這一點。例如,Java Enums使用它來確保'compareTo'只能傳遞該枚舉的值。見[這裏](http://madbean.com/2004/mb2004-3/)和[這裏](http://msmvps.com/blogs/jon_skeet/archive/2008/08/20/lessons-learned-from -protocol緩衝器部分-2-自引用泛型-types.aspx)。 – 2010-05-27 14:58:29