C#知识:索引器
索引器给对象添加了索引访问的功能,实际访问的是对象的成员,感觉不太常用。
1、主要内容及代码示例
- 索引器中类似属性,也包含get和set方法
- 索引器能够使像访问数组一样访问对象
- 一般当类中有数组类型的成员变量时,可以考虑使用索引器
- 索引器可以为读写操作添加额外的处理逻辑
- 索引器支持重载,参数可以不止一个,可以不是整数
- 一般是公共的,因为要从类外访问
namespace LearnIndexer
{class Item{private float x;private float y;private int[] values; //一般当类中有数组类型的成员变量时,可以考虑使用索引器public Item(float x, float y, int[] values){this.x = x;this.y = y;this.values = values;}public int GetCount() => values.Length;public int this[int idx] //索引器中类似属性,也包含get和set方法{get{if(idx < 0 || idx >= values.Length) //索引器可以为读写操作添加额外的处理逻辑{Console.WriteLine("索引越界");return -1;}return values[idx];}}public float this[char axis] //索引器支持重载,索引参数可以不止一个,可以不是整数{get{switch(axis){case 'x':return x;case 'y':return y;}return -1;}set{if(value < 0){Console.WriteLine("不能修改为负数");return;}switch (axis){case 'x':x = value;break;case 'y':y = value;break;}}}}internal class Program{static void Main(string[] args){Item apples = new Item(2, 5, new int[] { 1, 2, 3 });//索引器能够使像访问数组一样访问对象Console.WriteLine($"x = {apples['x']} y = {apples['y']}"); //x = 2 y = 5int totalValue = 0;for(int i = 0; i < apples.GetCount(); i++){totalValue += apples[i];}Console.WriteLine(totalValue); //6}}
}
2、参考资料
- 《唐老狮C#》
本篇结束,感谢您的阅读~