C#中的索引器

索引器是一类共对象在外部以一种更便捷的方式访问或修改类内变量的方法,例如:依据索引访问类内集合性质的元素以及其他更加自由的操作。在语法上,综合了函数与成员属性的写法。允许重载。其内部的get/set规则也与成员属性类似。

cs 复制代码
namespace ConsoleApp5
{
    class Person
    {
        public Person()
        {
            array = new int[10, 10]; // 或根据需要设定维度
        }
        private string name;
        private int age;
        private Person[] friends;

        private int[,] array;
        //利用索引器访问二维数组
        public int this[int i, int j]
        {
            get { return array[i, j]; }
            set { array[i, j] = value; }
        }
        //利用索引器传入的字符串返回对应的成员变量
        private string this[string str]
        {
            get
            {
                switch (str)
                {
                    case "name":
                        return this.name;
                        break;
                    case "age":
                        return this.age.ToString();
                    default:
                        return "";
                }

            }
        }
        //利用索引器访问一维数组(允许添加额外逻辑)
        public Person this[int index]
        {
            get
            {
                if (friends == null || friends.Length - 1 < index)
                {
                    return null;
                }
                else
                {
                    return friends[index];
                }
            }
            set
            {
                if (friends == null)
                {
                    friends = new Person[] { value };
                }
                else if (friends.Length - 1 < index)
                {
                    friends[friends.Length - 1] = value;
                }
                else
                {
                    friends[index] = value;
                }
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();
            p[0] = new Person();
            Console.WriteLine(p[0]);
            p[0, 0] = 10;
        }
    }
}
相关推荐
码匠许师傅6 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
bkspiderx7 小时前
基于Socket的广播通信及C语言实现详解
c语言·开发语言·socket·广播·socket的广播通信
小王C语言7 小时前
Qt常用控件:输入类控件,单行/多行输入框、下拉框、(日期)微调框、旋钮、滑动条
开发语言·qt
ESDWAN7 小时前
SD-WAN 主备切换为什么仍然会断网?从检测机制到会话恢复分析
开发语言·php
1001101_QIA7 小时前
.exe does not seem to be a Qt executable.
开发语言·qt
echome8888 小时前
Python 异常处理:try、else、finally 的正确搭配
开发语言·前端·python·异常处理·编程技巧
云和数据.ChenGuang8 小时前
Python 单继承与多继承深度剖析:从 MRO 到实战取舍
开发语言·人工智能·python·langchain
小咕聊编程8 小时前
基于Python的豆瓣电影数据可视化系统构建分析
开发语言·python·信息可视化
脏脏a10 小时前
延迟与画质:远程控制的生命线
开发语言·php
像风一样的男人@10 小时前
python --基于scp的文件传输助手
开发语言·python