索引器类似于属性。和属性相似,索引器一样有get和set访问器。
索引器与属性的不同点:
1、每个属性的名称必须唯一,而每一个索引器的签名必须唯一。
2、索引器的“属性名”统一为this。而不能为其他,专门用于定义索引器。
3、索引器的参数列表包含在方括号而不是圆括号之内。
4、属性可以是静态的,而索引器只能为实例成员。
5、属性的get访问器没有参数,而索引器的get访问器可以有参数,而且索引器的get访问器和set访问器的参数相同。
6、索引器可以有多个形参,比如访问多维数组时。
索引器和数组对比:
数组 索引器
索引类型 整型,0-n 可以为任意类型
是否存储数据 是 否,通过访问器操作存在其他地方的数据,例如集合或数组字符串等。
是否允许重载 否 是,一个类可以有多个索引器
代码示例1:
class Program { static void Main(string[] args) { Index index = new Index(); Console.WriteLine(index[1]); //输出 刘备 Console.WriteLine(index[2]); //输出 关羽 Console.WriteLine(index[3]); //输出 张飞 index[3] = "诸葛亮"; Console.WriteLine(index[3]); //输出 诸葛亮 Console.ReadKey(); } } public class Index { string Name1 = "刘备"; string Name2 = "关羽"; string Name3 = "张飞"; public string this[int Id] { get { switch (Id) { case 1: return Name1; break; case 2: return Name2; break; case 3: return Name3; break; default: return ""; break; } } set { switch (Id) { case 1: Name1 = value; break; case 2: Name2 = value; break; case 3: Name3 = value; break; } } } }
代码示例2-字符串访问以及索引器的重载示例:
class Program { static void Main(string[] args) { Index index = new Index();; Console.WriteLine(index[0]); //输出 刘备 index.dic = new Dictionary<string, string>(); index.dic.Add("诸葛亮","村夫"); Console.WriteLine(index["诸葛亮"]); //输出 村夫 Console.ReadKey(); } } public class Index { string[] strArr = { "刘备", "关羽", "张飞" }; public string this[int i] { get { return strArr[i]; } set { strArr[i] = value; } } public Dictionary<string, string> dic; public string this[string name] { get { return dic[name]; } set { dic[name] = value; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现