“奇怪的”c#属性语法

本文关键字:属性语法 奇怪的 | 更新日期: 2023-09-27 17:50:27

我刚刚在一个c#项目中看到这个:

public char this[int index]

我认为自己是c#的新手;有人知道这是什么意思吗?

“奇怪的”c#属性语法

这是一个索引器

索引器允许对类或结构的实例进行索引数组。索引器类似于属性,只是它们的访问器使用参数。索引器提供类似数组的语法。它允许访问类型和数组一样。诸如索引器之类的属性经常访问支持存储。我们通常接受int类型的形参并访问a数组类型的后备存储。

从http://www.dotnetperls.com/indexer读取

string s = "hello";
Console.WriteLine (s[0]); // 'h'
Console.WriteLine (s[3]); // 'l'

实现索引器

要编写索引器,定义一个名为this的属性,并在方框中指定参数括号。例如:

class Sentence
{
   string[] words = "The quick brown fox".Split();
   public string this [int wordNum] // indexer
   {
      get { return words [wordNum]; }
      set { words [wordNum] = value; }
   }
}

我们可以这样使用这个索引器:

Sentence s = new Sentence();
Console.WriteLine (s[3]); // fox
s[3] = "kangaroo";
Console.WriteLine (s[3]); // kangaroo

一个类型可以声明多个索引器,每个索引器都有不同类型的参数。一个Indexer也可以接受多个参数:

public string this [int arg1, string arg2]
{
  get  { ... } set { ... }
}

索引器内部编译为称为get_Itemset_Item的方法,如下所示:

public string get_Item (int wordNum) {...}
public void set_Item (int wordNum, string value) {...}

编译器默认选择名称Item—实际上您可以通过用以下属性装饰索引器:

[System.Runtime.CompilerServices.IndexerName ("Blah")]

这就是indexer

  • Indexer
  • 带有访问修饰符的c#属性和索引器的c++实现

这叫做索引器。更多信息请访问MSDN。