这里真正发生了什么:
public decimal[] Coefficients;
public decimal this[int i]
{
get { return Coefficients[i]; }
set { Coefficients[i] = value; }
}
this
的作用是什么?它是decimal
的某种扩展吗?
答案 0 :(得分:11)
它是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.
答案 1 :(得分:2)
当你使用像obj [1]这样的语法时,它将被调用。 https://msdn.microsoft.com/en-us/library/6x16t2tx.aspx
答案 2 :(得分:2)
你有没有想过List<T>
的{{1}}如何在c#中工作?就像数组一样?
答案在你的问题中。您发布的语法是一种语法糖,编译器将其转换为名为myList[i]
和get_Item(int index)
的属性。例如,它在set_Item(int index, decimal value)
中用于访问类中使用的内部数组,并返回指定索引处的元素(set或get)。此功能称为Indexer。
要自己测试一下,尝试创建一个具有相同签名的方法:
List<T>
您将收到编译器错误:
错误CS0082:类型'MyClass'已经保留了一个名为的成员 'get_Item'具有相同的参数类型