20250529-C#知识:索引器

发布于:2025-05-30 ⋅ 阅读:(17) ⋅ 点赞:(0)

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、参考资料

  1. 《唐老狮C#》

本篇结束,感谢您的阅读~

在这里插入图片描述