"奇怪的"C#属性语法

use*_*745 8 c# indexer properties

我刚刚在ac#项目中看到了这个:

public char this[int index]
Run Code Online (Sandbox Code Playgroud)

我认为自己是C#的新手; 任何人都可以帮助它的意义吗?

Son*_*nül 15

它是一个索引器.

索引器允许类或结构的实例像数组一样被索引.索引器类似于属性,除了它们的访问器接受参数.索引器提供类似于数组的语法.它允许以与数组相同的方式访问类型.索引器等属性通常访问后备存储.我们经常接受int类型的参数并访问数组类型的后备存储.

请阅读http://www.dotnetperls.com/indexer

string s = "hello";
Console.WriteLine (s[0]); // 'h'
Console.WriteLine (s[3]); // 'l'
Run Code Online (Sandbox Code Playgroud)

实现索引器

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

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

以下是我们如何使用此索引器:

Sentence s = new Sentence();
Console.WriteLine (s[3]); // fox
s[3] = "kangaroo";
Console.WriteLine (s[3]); // kangaroo
Run Code Online (Sandbox Code Playgroud)

类型可以声明多个索引器,每个索引器具有不同类型的参数.索引器也可以使用多个参数:

public string this [int arg1, string arg2]
{
  get  { ... } set { ... }
}
Run Code Online (Sandbox Code Playgroud)

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

public string get_Item (int wordNum) {...}
public void set_Item (int wordNum, string value) {...}
Run Code Online (Sandbox Code Playgroud)

编译器Item默认选择名称- 您实际上可以通过使用以下属性修饰索引器来更改此名称:

[System.Runtime.CompilerServices.IndexerName ("Blah")]
Run Code Online (Sandbox Code Playgroud)


Mat*_*nen 7

这被称为索引器.在MSDN上阅读有关它们的更多信息.