奇怪的C#属性定义(索引器)

时间:2013-04-25 12:10:07

标签: c# properties

这与C#中的普通属性有什么不同?

    public new Point3D this[int index]
    {
        get { return base[index]; }
        set
        {
            base[index] = value;
            CollectionModified();
        }

3 个答案:

答案 0 :(得分:5)

这是索引器;它不是用作obj.Foo,而是用作obj[index],即:

var oldVal = obj[1];
obj[1] = newVal;

它是“不同的”,因为:

  • 它没有明确的名称
  • 它接受一个参数(或参数)

请注意,索引器参数不必是整数;可以是各种各样的:

Dictionary<string, decimal> lookup = ...
string employeeKey = "000006";
decimal salary = lookup[employeeKey];

答案 1 :(得分:2)

这是Indexer。它的工作原理如下(无需调用任何属性):

yourPoints[0] = new Point3D();

Point3D point = yourPoints[0];

答案 2 :(得分:2)

这是一个索引器属性,这是一种属性,它允许您的自定义类参与在方括号中传递数组下标的表达式。

此索引器替换其基类(可能是集合)的索引器属性,该属性还必须具有索引器属性。 getter将调用转发给base,而setter也调用CollectionModified,大概是为了通知那些正在观看集合中修改的人。