ホームページ >バックエンド開発 >C++ >共分散がC#の値タイプで動作しないのはなぜですか?

共分散がC#の値タイプで動作しないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-30 21:11:10832ブラウズ

Why Doesn't Covariance Work with Value Types in C#?

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

C#のインターフェイスは共分散を示し、ベースタイプ参照への派生型参照を割り当てることができます。 ただし、これは値タイプには適用されません。 IEnumerable<T>IEnumerable<int>に割り当てられて、コンパイルエラーが発生します IEnumerable<object>この制限は、ボクシングとボクシングから生じます。ボクシングは値タイプを参照タイプ(

)に変換し、ボクシングを解凍するとこれが逆転します。

のタイプパラメーターobjectは、参照タイプでのみ動作します。 値タイプのIEnumerable<T>Tに割り当てるには、ボクシングが必要です。これは、値の種類に対して暗黙的にサポートされていません。 IEnumerable共分散と違反は、変換全体で一貫した価値表現に依存しています。ただし、値のタイプは、この一貫性を維持しないでください。 ボクシングは表現を変更し、アイデンティティの喪失と不安定性につながり、共変と矛盾の割り当ての原則に違反します。 IEnumerable<object>エリックリッパートの表現とアイデンティティに関する著作は、これらの変換がアイデンティティの保存を必要とすることを強調しています。 Value Typeのボクシングプロセスはこの保存を破壊するため、共分散と矛盾と互換性がありません。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。