C#中的索引器

索引器初探

先来看看没有索引的简单类,可以使用字段的名称访问它们,代码如下所示:

 class student 
    {
        public string? name;
        public int age;
        public string? grade;
    }
    internal class Program
    {
        static void Main(string[] args)
        {
          var student = new student();
            student.name = "小王";
            student.age = 20;
            student.grade = "大一";
            Console.WriteLine($"姓名:{student.name},年龄:{student.age},年级:{student.grade}");
        }
    }

运行结果,如下所示:

C#中的索引器

创建的student对象,如下图所示:

C#中的索引器

然而有的时候,如果使用索引访问它们将会更方便,好像该实例是字段的数组一样,这就是索引器允许做的事。为Student类写一个索引器,就可以不使用点运算符,而是使用索引运算符,它由一对方括号和中间的索引组成,代码如下所示:

class student 
    {
        public string? name;
        public int age;
        public string? grade;
        public string this[int index]
        {
            //实现索引器的get方法
            get
            {
               switch (index) 
                { 
                    case 0return name;
                    case 1return age.ToString();
                    case 2return grade;

                    default:
                        throw new ArgumentOutOfRangeException("index");
                }
            }
            //实现索引器的set方法
            set
            {
                switch (index)
                {
                    case 0: name = valuebreak;
                    case 1: age = Convert.ToInt32(value); break;
                    case 2: grade = valuebreak;

                    default:
                        throw new ArgumentOutOfRangeException("index");
                }
            }

        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
          var student = new student();
            student.name = "小王";
            student.age = 20;
            student.grade = "大一";
            Console.WriteLine($"姓名:{student[0]},年龄:{student[1]},年级:{student[2]}");
        }
    }

运行结果,如下图所示:

C#中的索引器

这时,创建的student对象,如下图所示:

C#中的索引器

索引器

索引器是一组get和set访问器,与属性类似。索引器的表现形式,如下所示:

 Type this [ int index]
   {
          set
            {
                  //Code
            }
          get
            {
                 //Code
            }
    }
C#中的索引器

索引器和属性

索引器和属性在很多方面是相似的。

1、和属性一样,索引器不用分配内存来存储。

2、索引器和属性都主要被用来访问其他数据成员,它们与这些成员关联,并为它们提供获取和设置访问。

属性通常表示单独的数据成员

索引器通常表示多个数据成员

关于索引器的注意事项

1、和属性一样,索引器可以只有一个访问器,也可以两个都有。

2、索引器总是实例成员,因此不能声明为static。

3、和属性一样,实现get和set访问器的代码不必一定要关联到某个字段或属性。这段代码可以做任何事情也可以什么都不做,只要get访问器返回某个指定的类型的值即可。

索引器的set访问器

当索引器被用于赋值时,set访问器被调用,并接受两项数据,如下:

1、一个隐式参数,名称为value,value持有要保存的数据。

2、一个或更多索引参数,表示数据应该保存到哪里。

索引器的get访问器

当使用索引器获取值时,可以通过一个或者多个索引参数调用get访问器,索引参数指示获取哪个值。

索引器重载

只要索引器的参数列表不同,类就可以有任意多个索引器。

索引器的类型不同是不够的,如下图所示:C#中的索引器

之前定义了返回类型为string的索引器,现在仅仅将返回类型设置为int是不够的

参考资料

《C#图解教程(第4版)》——Daniel M. Solis


原文始发于微信公众号(DotNet学习交流):C#中的索引器

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/230856.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!