ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 索引器(C# 编程指南) 索引器允许类或结构的实例就像数组一样进行索引。索引器类似于[属性](https://msdn.microsoft.com/zh-cn/library/x9fsa0sw.aspx),不同之处在于它们的取值函数采用参数。 在下面的示例中,定义了一个泛型类,并为其提供了简单的 [get](https://msdn.microsoft.com/zh-cn/library/ms228503.aspx) 和 [set](https://msdn.microsoft.com/zh-cn/library/ms228368.aspx) 取值函数方法(作为分配和检索值的方法)。 Program 类创建了此类的一个实例,用于存储字符串。 ``` class SampleCollection<T> { // Declare an array to store the data elements. private T[] arr = new T[100]; // Define the indexer, which will allow client code // to use [] notation on the class instance itself. // (See line 2 of code in Main below.) 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 class shows how client code uses the indexer. class Program { static void Main(string[] args) { // Declare an instance of the SampleCollection type. SampleCollection<string> stringCollection = new SampleCollection<string>(); // Use [] notation on the type. stringCollection[0] = "Hello, World"; System.Console.WriteLine(stringCollection[0]); } } // Output: // Hello, World. ``` | ![](https://box.kancloud.cn/2016-01-31_56adb62c1380a.jpg) 注意 | | :-- | | 有关更多示例,请参阅[相关章节](#BKMK_RelatedSections)。 | ## 表达式主体定义 直接只返回表达式结果的索引器很常见。下面的语法快捷方式使用 **=&gt;** 来定义这些索引器: ``` public Customer this[long id] => store.LookupCustomer(id); ``` 索引器必须为只读,并且你不能使用 **get** 取值函数关键字。 ## 索引器概述 * 使用索引器可以用类似于数组的方式为对象建立索引。 * **get** 取值函数返回值。 **set** 取值函数分配值。 * [this](https://msdn.microsoft.com/zh-cn/library/dk1507sz.aspx) 关键字用于定义索引器。 * [value](https://msdn.microsoft.com/zh-cn/library/a1khb4f8.aspx) 关键字用于定义由 **set** 索引器分配的值。 * 索引器不必根据整数值进行索引;由你决定如何定义特定的查找机制。 * 索引器可被重载。 * 索引器可以有多个形参,例如当访问二维数组时。 <a id="BKMK_RelatedSections"></a> ## 相关章节 * [使用索引器(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/2549tw02.aspx) * [接口中的索引器(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/tkyhsw31.aspx) * [属性和索引器之间的比较(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/4bsztef7.aspx) * [限制访问器可访问性(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/75e8y5dd.aspx) ## C# 语言规范 有关详细信息,请参阅 [C# 语言规范](https://msdn.microsoft.com/zh-cn/library/ms228593.aspx)。该语言规范是 C# 语法和用法的权威资料。 ## 请参阅 [C# 编程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [属性(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/x9fsa0sw.aspx)