2013-01-03 18 views
8

私はC#プロジェクトでこれを見た:「奇妙な」C#プロパティの構文

public char this[int index] 

私はC#に自分自身が新しい考えます。誰もが意味するものを助けることができますか?

+3

「私は自分自身をC++に新しいものと考えていますが、C++で意味のあるものを助けることができます。 – BoltClock

+2

@BoltClock C++の人がC#でこれを見た? – Shark

+2

@ Shark:これも私が思ったことですが、二重取りの後でなければなりません。 – BoltClock

答えて

15

インデクサーです。

インデクサーを使用すると、クラスまたは構造体のインスタンスのインデックスを 配列のようにすることができます。インデクサは、アクセサーが のパラメータを取る以外は、プロパティと似ています。 インデクサーは配列のような構文を提供します。これは、配列と同じ方法で、型にアクセスすることができます。 インデックス作成者などのプロパティは、多くの場合、 バッキングストアにアクセスします。 int型のパラメータを受け入れ、配列型のバッキングストア にアクセスします。

平方 括弧で引数を指定して、この呼ばれるプロパティを定義し、インデクサを書き込むには、インデクサに

を実装http://www.dotnetperls.com/indexer

string s = "hello"; 
Console.WriteLine (s[0]); // 'h' 
Console.WriteLine (s[3]); // 'l' 

からそれを読んでください。例えば:ここで

class Sentence 
{ 
    string[] words = "The quick brown fox".Split(); 
    public string this [int wordNum] // indexer 
    { 
     get { return words [wordNum]; } 
     set { words [wordNum] = value; } 
    } 
} 

は、我々は、このインデクサーを使用することができます方法は次のとおりです。

Sentence s = new Sentence(); 
Console.WriteLine (s[3]); // fox 
s[3] = "kangaroo"; 
Console.WriteLine (s[3]); // kangaroo 

タイプは、複数のインデクサ、異なる種類のパラメータを持つそれぞれを宣言してもよいです。 インデクサはまた、複数のパラメータを取ることができます:

public string this [int arg1, string arg2] 
{ 
    get { ... } set { ... } 
} 

次のようにインデクサーは、内部、get_Itemset_Itemと呼ばれる方法にコンパイルします。コンパイラは、デフォルト実際にできることで名前Itemを選択

public string get_Item (int wordNum) {...} 
public void set_Item (int wordNum, string value) {...} 

をこれを で変更して、次の属性でインデクサーを飾ります:

[System.Runtime.CompilerServices.IndexerName ("Blah")] 
7

。それらについてもっと読むat MSDN