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_Item和set_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)