Indexers 索引子
Indexers 索引子
using System;
namespace ConsoleApp1
{
class Test
{
// Define the indexer to allow client code to use [] notation.
public string this[string i]
{
get
{
return i;
}
}
public int this[int i]
{
get
{
return i;
}
}
// use Expression body
public string this[bool i] => i.ToString();
}
class Program
{
static void Main(string[] args)
{
var stringCollection = new Test();
string a = stringCollection["aaa"];
Console.WriteLine(a);
int b = stringCollection[100];
Console.WriteLine(b);
string c = stringCollection[true];
Console.WriteLine(c);
Console.ReadKey();
}
}
}
說明:
1、這 indexer 特性你可以把它看成是另一種 property 的用法。
2、在呼叫有 indexer 成員時,你會有在使用陣列的錯覺。
3、一個 indexer 主體結構如下,通常會搭配 this keyword。
public int this[int index] // Indexer declaration
{
// get and set accessors
}
4、一個 class 可以有多個 indexer,但需注意其 signature(回傳型別) 須不一樣。
5、其他範例
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Sports sports = new Sports();
Console.WriteLine(sports[1]);
Console.ReadKey();
}
}
public class Sports
{
private string[] types = {
"Baseball",
"Basketball",
"Football",
"Hockey",
"Soccer",
"Tennis",
"Volleyball"
};
public string this[int i]
{
get => types[i];
set => types[i] = value;
}
}
}
參考資料: