3

重複の可能性:
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 をオーバーライドして BaseClass の派生クラスを返すことができないのはなぜですか? これは危険ですか?署名が継承関係をチェックしていないだけですか?

Public Class TestSpecific
    Inherits TestBase
    Public Overrides Property SomeClass as DerivedClass
End Class

これが.NET 4で許可されていない理由についての洞察をいただければ幸いです。

4

1 に答える 1

4

Eric Lippertは、ここで質問の最初の部分に答えます

質問の 2 番目の部分については、C# と VB.NET の両方で戻り値の型の共分散が要求されていますが、他の言語機能と比較して十分に優先順位が付けられていないため、リリースに含めることができません。私の記憶が正しければ、この機能を適切に実装するには、CLR への変更も必要でした。

なぜそうなのかについては、Eric Lippert 氏に話を聞いて、機能を実装しないのは無料ですが、機能を実装するには、設計、開発、テスト、および文書化するための予算と時間が必要であると答えます。無料ではありません。機能は、それを作成する費用を正当化するのに十分な数の人々にとって十分に価値のあるものでなければなりません。

于 2010-05-27T14:35:57.313 に答える