ホームページ > バックエンド開発 > C++ > 共分散と違反は、C#のバリュータイプで動作しないのですか?

共分散と違反は、C#のバリュータイプで動作しないのですか?

Susan Sarandon
リリース: 2025-01-30 21:16:10
オリジナル
190 人が閲覧しました

Why Don't Covariance and Contravariance Work with Value Types in C#?

c#共分散と違反:値タイプの制限

C# 'の共分散と矛盾の機能により、柔軟なタイプの割り当てが可能になります。 ただし、値タイプを使用すると、これらの機能は制限されています。

は共分散を示し、オブジェクト参照への基準の割り当てを許可します。 これは、次のように、値のタイプに拡張されません IEnumerable<T> この違いはボクシングに由来します。 値タイプを参照変数に割り当てるには、ボクシングが必要であり、新しいヒープに割り当てられたオブジェクトを作成します。 これにより、オーバーヘッドが追加され、潜在的なランタイムの問題が導入されます T共分散を使用すると、共通言語ランタイム(CLR)は、箱入りの値のアイデンティティの保存を保証することはできません。 たとえば、

を受け入れて要素を変更するメソッドは、
IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;  // Compiles fine

IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;  // Compilation error
ログイン後にコピー
の箱入り値が変わらないことを保証するものではありません。 その結果、タイプの安全性を維持し、ボクシング関連のエラーを防ぐために、C#。

以上が共分散と違反は、C#のバリュータイプで動作しないのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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