2013-01-03 75 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方法,如下所示:

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

編譯器在默認情況下,您選擇的名稱Item實際上可以將此更改爲 用以下屬性裝飾您的索引器:

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

這就是所謂的索引。閱讀更多關於它們的信息at MSDN