什麼實際發生在這裏:有人可以解釋這個C#語法嗎?
public decimal[] Coefficients;
public decimal this[int i]
{
get { return Coefficients[i]; }
set { Coefficients[i] = value; }
}
什麼是this
作爲?這是decimal
的某種擴展嗎?
什麼實際發生在這裏:有人可以解釋這個C#語法嗎?
public decimal[] Coefficients;
public decimal this[int i]
{
get { return Coefficients[i]; }
set { Coefficients[i] = value; }
}
什麼是this
作爲?這是decimal
的某種擴展嗎?
這是一個Indexer。
索引器允許像數組一樣索引類或結構的實例。索引器類似於屬性,但它們的訪問器需要參數。從鏈接MSDN
實施例:
class SampleCollection<T>
{
// Declare an array to store the data elements.
private T[] arr = new T[100];
// Define the indexer, which will allow client code
// to use [] notation on the class instance itself.
// (See line 2 of code in Main below.)
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 class shows how client code uses the indexer.
class Program
{
static void Main(string[] args)
{
// Declare an instance of the SampleCollection type.
SampleCollection<string> stringCollection = new SampleCollection<string>();
// Use [] notation on the type.
stringCollection[0] = "Hello, World";
System.Console.WriteLine(stringCollection[0]);
}
}
// Output:
// Hello, World.
它是一個索引當你使用像語法OBJ它會被稱爲[1]。 https://msdn.microsoft.com/en-us/library/6x16t2tx.aspx
你有沒有想過如何List<T>
的myList[i]
工作在C#就像一個數組?
答案在你的問題。您發佈的語法是編譯器轉換爲名爲get_Item(int index)
和set_Item(int index, decimal value)
的屬性的語法糖。它在List<T>
中用於訪問類中使用的內部數組,並返回指定索引處的元素(set或get)。該功能稱爲Indexer。
爲了測試自己,嘗試創建具有相同簽名的方法:
public decimal get_Item(int i)
{
return 0;
}
你會得到一個編譯錯誤:
錯誤CS0082:類型「MyClass的」已經儲備了成員稱爲 具有相同參數類型的'get_Item'
如果您的類名爲MathTest,那麼它允許您訪問我們的內部係數數組MathTest [i]而不是MathTest.Coefficients [i]。請參閱http://stackoverflow.com/questions/1307354/c-sharp-indexer-usage和http://stackoverflow.com/questions/2185071/real-world-use-cases-for-c-sharp-indexers – ManoDestra
爲什麼downvotes .. – PreqlSusSpermaOhranitel
不知道。我贊成你。問題對我來說似乎很清楚。也許研究得不是很好,因爲它是一個基本的語言語法問題,但仍然是有效的國際海事組織。 – ManoDestra