2016-07-08 40 views
2

c#中的item属性是否总是像c#中的索引器一样使用? 让我来解释一下example。 ArrayList具有许多属性,如计数,容量,其中一个是Item.Item属性,不同于通过在ArrayList的名称后面放置点来访问的计数和容量,不由关键字项使用,但由索引器直接使用。 例如c中的项属性#

ArrayList MyList = new ArrayList(); 
MyList.add(100); 
MyList[0] = 200; 

像上面例如使用Item关键字来定义索引器,而不是实现Item属性。

我的问题:我可以说,每当在c#项目属性被解释应该隐式理解,它是指术语索引器?

回答

4

MyList[0]是一个索引器,它使你像数组一样访问对象。定义的语法是这样的:

public T this[int index] 
{ 
    // reduced for simplicity 
    set { internalArray[index] = value; } 
    get { return internalArray[index]; } 
} 

编译器生成的方法:

public T get_Item(inde index) 
{ 
    return internalArray[index]; 
} 

public void set_Item(inde index, T value) 
{ 
    internalArray[index] = value; 
} 

List.Add(something)List[0] = something没有关系。第一种方法是将值附加到列表的末尾。第二个是调用方法List.set_Item(0, something)的语法糖。

除非CLAR语句直接支持[]语法(与数组类似),否则它是在类中定义的索引器,它使用上面解释的语法糖。

+0

语法糖?这是什么意思,你能解释一下吗? –

+0

@PranitaJain简单地说,我将语法糖看作编译器提供的语法快捷键,以使我们的生活更轻松。编译器将其转换为正确的语法。例如,你编写'array.ToList();'编译器将它改为'Enumerable.ToList(array);'(这些是扩展方法) – user3185569

+0

得到它。感谢您的详细解答。 –

2

根据上面的文档,索引器定义如下。

public virtual object this[ 
    int index 
] { get; set; } 

更准确地说,实际上是没有Item属性,但该索引被称为文档中“商品属性”。