59

私はいくつかのライブラリコードを調べていて、次のようなメソッドを見ました:

public CollapsingRecordNodeItemList List
{
    get { return this[0] as CollapsingRecordNodeItemList; }
}

このメソッドを含むクラスはリストでも反復可能なものでもありません。では、正確にはthis[0]どういう意味ですか?

4

4 に答える 4

96

クラスでインデクサーを探します。

C# では、この種のアクセスを許可するインデクサーを定義できます。

「SampleCollection」の公式ガイドの例を次に示します。

public T this[int i]
    {
        get
        {
            // This indexer is very simple, and just returns or sets 
            // the corresponding element from the internal array. 
            return arr[i];
        }
        set
        {
            arr[i] = value;
        }
    }

公式言語仕様の定義は次のとおりです。

インデクサーは、配列と同じ方法でオブジェクトにインデックスを付けられるようにするメンバーです。インデクサーはプロパティのように宣言されますが、メンバーの名前は this であり、その後に区切り記号 [ と ] の間にパラメーター リストが記述されます。パラメーターは、インデクサーのアクセサーで使用できます。プロパティと同様に、インデクサーは読み取り/書き込み、読み取り専用、および書き込み専用にすることができ、インデクサーのアクセサーは仮想にすることができます。

完全で完全な定義は、仕様のセクション10.9 インデクサーにあります。

于 2013-05-20T13:07:43.570 に答える
10

これは、宣言型 (またはその基本クラス) に、おそらくint(または類似の) 値を取り、何か (おそらくobject?) を返す「インデクサー」があることを意味します。このコードは、インデックスとして渡してインデクサーのgetアクセサーを呼び出し0、返された値を として扱いますCollapsingRecordNodeItemList(またはnull、返された値はそれと互換性がありません)。

例えば:

public object this[int index] {
    get { return someOtherList[index]; }
}

ただし、最も簡単なことは、それに足を踏み入れることです。それはそれがどこに向かっているのかを正確に教えてくれます。

于 2013-05-20T13:07:46.143 に答える
2

IListクラス自体が何らかの形式 if /から継承すると仮定するとIList<T>、コレクションの最初の要素を返す (そしてキャストする) だけです。

public class BarCollection : System.Collections.CollectionBase
{
    public Bar FirstItem
    {
        get { return this[0] as Bar; }
    }

    #region Coming From CollectionBase
    public Object this[ int index ]  {
        get { return this.InnerList[index]; }
        set { this.InnerList[index] = value; }
    }
    #endregion
}
于 2013-05-20T13:07:42.547 に答える
1

itemこのクラスでプロパティのgetメソッドを呼び出すことを意味します。これは、クラスのインデクサーと呼ばれます

インデクサーを使用すると、配列のようにクラスまたは構造体のインスタンスにインデックスを付けることができます。インデクサーは、アクセサーがパラメーターを取ることを除いて、プロパティに似ています。

于 2013-05-20T13:07:38.197 に答える