有人可以解释这个C#语法吗?

时间:2016-07-07 18:50:29

标签: c#

这里真正发生了什么:

public decimal[] Coefficients;
public decimal this[int i]
{
    get { return Coefficients[i]; }
    set { Coefficients[i] = value; }
}

this的作用是什么?它是decimal的某种扩展吗?

3 个答案:

答案 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'具有相同的参数类型