2009-07-29 49 views
1
在下面的索引代碼塊

,爲什麼我們需要:問題一個簡單的索引器(C#)

public string this[int pos] 
{ 
    get 
    { 
     return myData[pos]; 
    } 
    set 
    { 
     myData[pos] = value; 
    } 
} 

究竟是什麼「這個」這個[INT POS]嗎?謝謝

/// Indexer Code Block starts here 
using System; 

/// <summary> 
///  A simple indexer example. 
/// </summary> 
class IntIndexer 
{ 
    private string[] myData; 

    public IntIndexer(int size) 
    { 
     myData = new string[size]; 

     for (int i = 0; i < size; i++) 
     { 
      myData[i] = "empty"; 
     } 
    } 

    public string this[int pos] 
    { 
     get 
     { 
      return myData[pos]; 
     } 
     set 
     { 
      myData[pos] = value; 
     } 
    } 

    static void Main(string[] args) 
    { 
     int size = 10; 

     IntIndexer myInd = new IntIndexer(size); 

     myInd[9] = "Some Value"; 
     myInd[3] = "Another Value"; 
     myInd[5] = "Any Value"; 

     Console.WriteLine("\nIndexer Output\n"); 

     for (int i = 0; i < size; i++) 
     { 
      Console.WriteLine("myInd[{0}]: {1}", i, myInd[i]); 
     } 
    } 
} 
+0

其他人聞到功課?如果是...它應該被標記爲這樣。 – 2009-07-29 23:35:24

+0

它沒有功課。即時通過在線教程自學C# http://www.csharp-station.com/Tutorials/Lesson11.aspx – user133466 2009-08-01 15:38:23

回答

3

從C#語法角度:

你需要this因爲 - 你怎麼回事就聲明它?一個類的功能必須有一個名字或地址來引用它。

的方法簽名是:

[modifiers] [type] [name] (parameters) 

public  string GetString (Type myparam); 

的屬性簽名是:

[modifiers] [type] [name] 

public  string MyString 

場簽名是:

[modifiers] [type] [name] 

public  string MyString 

由於一個索引沒有名字,也不會寫得很有道理:

public string [int pos] 

所以我們使用this來表示它是「名稱」。

2

這只是編譯器知道該屬性具有索引器語法的標記。

在這種情況下,它使myInd能夠使用「數組語法」(例如myInd [9])。

0

'this'關鍵字表示您定義的行爲將在您的類被訪問時被調用,就像它是一個數組一樣。由於您對類實例的定義行爲,在該上下文中使用「this」關鍵字是有道理的。你不叫myInd.indexer [],你叫myInd []。

4

這意味着您可以在對象本身上使用索引器(如數組)。

class Foo 
{ 
    public string this[int i] 
    { 
     get { return someData[i]; } 
     set { someData i = value; } 
    } 
} 

// ... later in code 

Foo f = new Foo(); 
string s = f[0]; 
0

它允許你的類以類似於數組的方式工作。在這種情況下,您的索引器允許您從IntIndexer類的外部透明地引用myData。

如果你沒有申報的索引,下面的代碼會失敗:

myInd[1] = "Something"; 
0

的「這個」你的情況表明此屬性是indexer這個類。這是C#的語法定義一個類的索引,所以你可以使用它像:

myInd[9] = ...