ホームページ > バックエンド開発 > C++ > C#でバリュータイプが共変動または矛盾していないのですか?

C#でバリュータイプが共変動または矛盾していないのですか?

Barbara Streisand
リリース: 2025-01-30 21:21:08
オリジナル
544 人が閲覧しました

Why Aren't Value Types Covariant or Contravariant in C#?

なぜC#の中程度のタイプが調整や反転をサポートしないのですか?

コラボレーションとインバーターの概念により、はコラボレーションの変更を使用して、スーパータイプを受け入れることができます(たとえば、

への割り当て

)。ただし、この動作は、IEnumerable<T>などの値タイプには適用されません。 IEnumerable<string> IEnumerable<object>ドキュメントは、この制限は、分散が参照タイプの原理にのみ適用できるためであることを指摘しています。理由を理解するために、ボクシングの概念と調整とインバーターへの影響を探りましょう。 IEnumerable<int>

値タイプとボクシングの役割

値タイプはメモリに直接保存され、その値からのロゴの分離はありません。値タイプが参照変数に割り当てられている場合、プロセスはボックスと呼ばれます。このプロセスでは、値タイプは、値タイプのメモリ位置を含むオブジェクトパッケージングデバイスにパッケージ化されます。このパッケージングデバイスにより、値のタイプをオブジェクトと見なすことができます。 パッキングと分散

調整効果を作成するために、CLRは、参照タイプをスーパー型に割り当てたときに表現されないことを確認する必要があります。これは、使用コードが動作しているオブジェクトの正確なタイプを知る必要がないためです。ただし、このタイプの場合、値はメモリに直接保存されます。したがって、値タイプが参照変数に割り当てられている場合、梱包操作が必要です。この梱包操作は、値によって表され、間接性の層を導入します。

識別と正方形の違い

識別とは、オブジェクトをベースタイプまたは派生型に割り当てたときに同じ識別子を維持する機能です。調整された変更では、CLR要求オブジェクトの識別が保持されます。ただし、値のタイプの場合、梱包とボックスの削除操作により、オブジェクトの識別が予期せず変更される場合があります。これは、Synergy Conversion Logoの特性に違反します。

したがって、

識別と参照の有効性を確保するために、CLRはコラボレーションとインバーターを参照タイプに制限するだけです。

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

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