ホームページ > バックエンド開発 > C++ > なぜ C# 配列は `IList` を直接実装しないのでしょうか?また、依然として実装されているように見えるのはなぜですか?

なぜ C# 配列は `IList` を直接実装しないのでしょうか?また、依然として実装されているように見えるのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-04 17:56:39
オリジナル
253 人が閲覧しました

Why Don't C# Arrays Directly Implement `IList`, and How Do They Still Seem To?

C# の配列: インターフェイス実装の詳細

C# の配列は IList を実装しているように見えますが、Count プロパティは公開されていません。これは、C# インターフェイスの実装規則に矛盾しているように思えるかもしれません。

実際には、配列は System.Collections.Generic.IList ではなく、System.Collections.IList を実装します。 IList のような汎用インターフェイスArray のような非ジェネリック型では実装できません。

ただし、CLR は、これらのインターフェイスを実装できる可能性がある特定の配列型を生成します。ただし、これらの具体的な配列型の場合でも、IEnumerable へのキャストは可能です。は動作しますが、インターフェイス マップを取得すると例外がスローされます。

これは、コンパイラと CLR が配列を IList を実装しているものとして認識する「カモのような」型付けが原因です。キャスト命令は、IList の実装を提供する隠しラッパー クラス System.SZArrayHelper によって処理されます。

Count プロパティが明示的に実装されていない場合でも、CLR は T[] 配列へのキャストを使用して内部ゲッターを提供します。

この動作は、やや型破りではありますが、 IList のシームレスかつ効率的な実装のために。配列の場合。これは、柔軟性と能力に貢献する C# と CLR の隠されたメカニズムを示す賢いテクニックです。

以上がなぜ C# 配列は `IList` を直接実装しないのでしょうか?また、依然として実装されているように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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