c#共分散と違反:値タイプの制限
C#のインターフェイスは共分散を示し、ベースタイプ参照への派生型参照を割り当てることができます。 ただし、これは値タイプには適用されません。 IEnumerable<T>
にIEnumerable<int>
に割り当てられて、コンパイルエラーが発生します
IEnumerable<object>
この制限は、ボクシングとボクシングから生じます。ボクシングは値タイプを参照タイプ(
のタイプパラメーターobject
は、参照タイプでのみ動作します。 値タイプのIEnumerable<T>
をT
に割り当てるには、ボクシングが必要です。これは、値の種類に対して暗黙的にサポートされていません。
IEnumerable
共分散と違反は、変換全体で一貫した価値表現に依存しています。ただし、値のタイプは、この一貫性を維持しないでください。 ボクシングは表現を変更し、アイデンティティの喪失と不安定性につながり、共変と矛盾の割り当ての原則に違反します。
IEnumerable<object>
エリックリッパートの表現とアイデンティティに関する著作は、これらの変換がアイデンティティの保存を必要とすることを強調しています。 Value Typeのボクシングプロセスはこの保存を破壊するため、共分散と矛盾と互換性がありません。
以上が共分散がC#の値タイプで動作しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。