我正在浏览一些库代码,并看到了如下方法:
public CollapsingRecordNodeItemList List
{
get { return this[0] as CollapsingRecordNodeItemList; }
}
包含此方法的类不是列表或可迭代的东西,那么究竟是什么this[0]
意思呢?
我正在浏览一些库代码,并看到了如下方法:
public CollapsingRecordNodeItemList List
{
get { return this[0] as CollapsingRecordNodeItemList; }
}
包含此方法的类不是列表或可迭代的东西,那么究竟是什么this[0]
意思呢?
在课堂上寻找索引器。
C# 允许您定义索引器以允许这种访问。
这是“SampleCollection”官方指南中的一个示例。
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,后面是写在分隔符 [ 和 ] 之间的参数列表。这些参数在索引器的访问器中可用。与属性类似,索引器可以是读写的、只读的和只写的,并且索引器的访问器可以是虚拟的。
可以在规范的第10.9 节索引器中找到完整和完整的定义。
这意味着声明类型(或它的基类)有一个“索引器”,它可能需要一个int
(或类似的)并返回......某些东西(也许是object
?)。该代码调用索引器的get
访问器,作为索引传递0
- 然后将返回值视为 a CollapsingRecordNodeItemList
(或null
返回值与该值不兼容)。
例如:
public object this[int index] {
get { return someOtherList[index]; }
}
不过,最简单的事情就是踏入其中。这会告诉你它的确切去向。
假设类本身继承自某种形式 if IList
/ IList<T>
,它只是返回(并转换)集合中的第一个元素。
public class BarCollection : System.Collections.CollectionBase
{
public Bar FirstItem
{
get { return this[0] as Bar; }
}
#region Coming From CollectionBase
public Object this[ int index ] {
get { return this.InnerList[index]; }
set { this.InnerList[index] = value; }
}
#endregion
}
这意味着在这个类上调用item
属性的get
方法。它被称为类的索引器
索引器允许类或结构的实例像数组一样被索引。索引器类似于属性,只是它们的访问器带有参数。