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 = 5
int totalValue = 0;
for(int i = 0; i < apples.GetCount(); i++)
{
totalValue += apples[i];
}
Console.WriteLine(totalValue); //6
}
}
}
2、参考资料
- 《唐老狮C#》
本篇结束,感谢您的阅读~