c#共分散と違反:値タイプの制限
C# 'の共分散と矛盾の機能により、柔軟なタイプの割り当てが可能になります。 ただし、値タイプを使用すると、これらの機能は制限されています。
は共分散を示し、オブジェクト参照への基準の割り当てを許可します。 これは、次のように、値のタイプに拡張されません
IEnumerable<T>
この違いはボクシングに由来します。 値タイプを参照変数に割り当てるには、ボクシングが必要であり、新しいヒープに割り当てられたオブジェクトを作成します。 これにより、オーバーヘッドが追加され、潜在的なランタイムの問題が導入されます
T
共分散を使用すると、共通言語ランタイム(CLR)は、箱入りの値のアイデンティティの保存を保証することはできません。 たとえば、
<code class="language-csharp">IEnumerable<string> strList = new List<string>(); IEnumerable<object> objList = strList; // Compiles fine IEnumerable<int> intList = new List<int>(); IEnumerable<object> objList = intList; // Compilation error</code>の箱入り値が変わらないことを保証するものではありません。 その結果、タイプの安全性を維持し、ボクシング関連のエラーを防ぐために、C#。
以上が共分散と違反は、C#のバリュータイプで動作しないのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。