10

これはCLRの制限ですか、それとも既存のコードとの互換性の問題がありますか?

これは、C#4.0でのデリゲート結合の混乱した分散に関連していますか?

編集:CLRでその制限を実行せずに、共変性/反変性を使用する言語を使用することは可能でしょうか?

4

3 に答える 3

8

なぜそれがそのように機能するのかについてのEricLippertの投稿を読みたいと思うでしょう。要するに、開発者がプロ​​グラミングでエラーの追跡を困難にする可能性のある悪い間違いを犯すことを許さずに、可能な限り多くの差異を許容したということです。4.0の差異の量は、3.0のルールよりも大幅に拡張されており、開発者にとって有益なものと、意図しないミスによる頭痛の種をあまり引き起こさずに安全に許可できるものとのバランスであると私は理解しています。

http://blogs.msdn.com/b/ericlippert/archive/tags/covariance+and+contravariance/default.aspx

于 2010-08-04T13:25:03.890 に答える
5

簡単な答え:これはCLRの制限です。

(私はこれについての良い具体的な説明をどこにもていません...私はどこかでそれを見逃したかもしれませんが、それについてのエリックのブログシリーズでそれを見たのを覚えていません。)

言いたいのは、デリゲートとインターフェースの両方が、実際の型の上にすでに「間接層」を形成しているということです。必要に応じて、メソッドまたはクラスのビュー。あるビューから別のビューに変更することはかなり合理的です。実際のクラスは、私にとってより具体的な表現のように感じます。ある具体的な表現から別の表現に移行することは、あまり合理的ではないと感じます。ただし、これは、真の技​​術的限界というよりは、非常に扱いやすい説明です。

于 2010-08-04T13:26:28.527 に答える
2

これはCLRの制限です。C#(4.0)でジェネリッククラスタイプの共変性と反変性が許可されないのはなぜですか?を参照してください。追加の解説のため。

于 2010-08-04T16:17:12.430 に答える