C# 索引器(Indexer)作用及使用
C# 中的索引器Indexer是一种特殊的成员它允许类的实例像数组一样通过索引下标来访问内部的数据。简单来说索引器让你可以为自己的类定义一种“默认属性”使得可以用类似对象名[索引]的方式来获取或设置值。索引器的作用提供类似数组的访问方式对于封装了集合或列表的类使用索引器可以让外部代码像操作数组一样方便地访问内部元素。封装内部数据结构你可以在索引器中添加额外的逻辑如边界检查、延迟加载、数据转换等同时保持调用者使用的简单语法。支持多维索引或非整数索引索引器的参数不限于int可以是任意类型如string从而实现类似于字典的通过键访问的功能。提高代码可读性和可维护性通过索引器类的使用者不必关心内部如何存储数据只需要知道如何通过索引访问。索引器的语法索引器的声明类似于属性但使用this关键字和方括号[访问修饰符] 返回类型 this [参数类型 参数名] { get { /* 返回索引对应的值 */ } set { /* 设置索引对应的值 */ } }返回类型索引器返回的元素类型。参数可以有一个或多个参数用于指定索引。参数可以是任何类型int、string等。get访问器类似属性的 get用于读取值。set访问器类似属性的 set用于赋值其中value关键字表示赋给的值。示例1简单的整数索引器public class StringCollection { private string[] data new string[10]; // 定义索引器 public string this[int index] { get { if (index 0 || index data.Length) throw new IndexOutOfRangeException(索引超出范围); return data[index]; } set { if (index 0 || index data.Length) throw new IndexOutOfRangeException(索引超出范围); data[index] value; } } } // 使用 var collection new StringCollection(); collection[0] Hello; collection[1] World; Console.WriteLine(collection[0]); // 输出 Hello示例2字符串索引器类似字典public class UserSettings { private Dictionarystring, string settings new Dictionarystring, string(); public string this[string key] { get { return settings.ContainsKey(key) ? settings[key] : null; } set { settings[key] value; } } } // 使用 var settings new UserSettings(); settings[theme] dark; settings[language] zh-CN; Console.WriteLine(settings[theme]); // 输出 dark示例3多维索引器public class Matrix { private int[,] data new int[3, 3]; public int this[int row, int col] { get { return data[row, col]; } set { data[row, col] value; } } }索引器与属性的区别特性索引器属性名称使用this关键字没有自定义名称有自定义名称参数必须包含参数列表可以重载不能有参数访问方式通过对象名[参数]通过对象名.属性名是否可以是静态的不能声明为static可以声明为static默认成员类只能定义一个默认索引器可以重载参数类型可以有多个属性索引器的注意事项索引器不能是静态的因为它是基于实例的。可以重载同一个类可以定义多个索引器只要参数类型或个数不同。可以只读只提供 get或只写只提供 set。通常用于封装内部集合但也可以用于其他场景例如解析字符串、按位访问等。性能考虑索引器内部如果包含复杂逻辑需要注意调用频率避免性能问题。实际应用场景自定义集合类如ListT、DictionaryTKey,TValue的简化版。数据访问层中的行/列访问例如DataTable的Rows[i]。矩阵、张量等数学对象。配置文件或设置管理器通过字符串键访问。字符串处理类例如按索引访问字符或按子串名访问特定部分。总结C# 索引器是一种强大的语法糖让自定义类型能够以直观的数组风格访问内部数据同时保持封装性和灵活性。掌握索引器有助于编写更具表达力和易用性的类库。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2411672.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!