ホームページ > バックエンド開発 > C++ > C# 配列は、明示的な Count プロパティを使用せずに IList をどのように実装しているように見えますか?

C# 配列は、明示的な Count プロパティを使用せずに IList をどのように実装しているように見えますか?

Susan Sarandon
リリース: 2025-01-05 09:30:39
オリジナル
387 人が閲覧しました

How Do C# Arrays Seemingly Implement IList Without an Explicit Count Property?

Count プロパティがないにもかかわらず、配列が IList を部分的に実装する方法

C# では、配列は IList を実装しますが、インターフェイスで明示的に宣言された Count プロパティがありません。このため、この動作がインターフェイス実装ルールの違反なのか、それとも単なる誤解なのかという疑問が生じています。

フレームワークの詳細

配列は IList を実装することができます。インタフェース。ただし、直接的な実装は存在しません。

CLR の Quacks-Like-a-Duck アプローチ

CLR は、値に使用されるものと同様の、配列に対する特別なテクニックを実装します。種類。コンパイラは IList へのキャストを認識します。そして、基礎となる配列オブジェクトを介してそれを実装するように CLR に指示します。次に CLR は、必要なインターフェイスを実装する非表示の System.SZArrayHelper クラスに実行を委任します。

Count プロパティの実装

Count プロパティは、明示的に宣言されていないにもかかわらず、アクセスされる。ただし、これは次のように実装されます:

internal int get_Count<T>() {
    // Warning: "this" is an array, not an SZArrayHelper
    T[] _this = JitHelpers.UnsafeCast<T[]>(this);
    return _this.Length;
}
ログイン後にコピー

コメントが示すように、この動作はルール違反とみなされる可能性がありますが、効率的な配列処理が容易になります。

結論

配列は IList を部分的に実装します。 CLR のアヒルもどきのアプローチを通じて。 Count プロパティは明示的に定義されていませんが、CLR によって内部的に実装され、配列と汎用コレクション間のシームレスな統合が可能になります。

以上がC# 配列は、明示的な Count プロパティを使用せずに IList をどのように実装しているように見えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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