ホームページ > バックエンド開発 > C++ > C# 4.0 がクラスの Generic Variance をサポートしないのはなぜですか?

C# 4.0 がクラスの Generic Variance をサポートしないのはなぜですか?

Barbara Streisand
リリース: 2025-01-12 21:31:45
オリジナル
606 人が閲覧しました

Why Doesn't C# 4.0 Support Generic Variance for Classes?

クラス内の汎用分散に対する C# 4.0 の制限

インターフェイスとは異なり、C# 4.0 ではクラスの一般的な差異は許可されません。 この制限により、なぜ制限があるのか​​という疑問が生じます。クラスの汎用バリアンスを有効にすることの潜在的な欠点は何ですか?

共変クラスによるチャレンジ

共変クラス C<T> を想像してください。 共分散を実装するには、T が厳密に出力タイプである必要があります。これは、クラスが入力として T を取るメソッドやプロパティを持つことができないことを意味します。 同様に、タイプ T のフィールドは、基本的にプロパティ セッターのように機能するため、許可されません。

限定的な適用性: 不変構造

共変クラスの唯一の現実的な適用は、リストやスタックのような不変構造です。不変クラスには利点がありますが、この限られた使用例では、不変クラス型の共分散をネイティブにサポートすることによるかなりのオーバーヘッドが正当化されません。

説明例: 潜在的な利点

共変 Stack<T> では、理論的には次のようなコードが可能になります。

<code class="language-csharp">Stack<string> strings = null;
strings = strings.Push("hello");
strings = strings.Push("goodbye");
Stack<object> objects = strings;
objects = objects.Push(123);</code>
ログイン後にコピー

ここでは、不変構造が型安全性を損なう操作を防ぐため、文字列スタックに整数を追加すると型安全になります。

概要

クラスの汎用分散にはいくつかの利点があるかもしれませんが、メソッドまたはプロパティの入力としてクラス型パラメーターを使用できないという制約が利点を上回ります。これは、C# 4.0 以降のバージョンにこの機能が存在しないことを説明しています。

以上がC# 4.0 がクラスの Generic Variance をサポートしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート