当前位置:首页 > C#学习 > 正文内容

C# 索引器

小道5年前 (2018-11-03)C#学习3013

索引器是一组get和set访问器,与属性类似。

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

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

属性通常表示单独数据成员,索引器通常表示多个数据成员。

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

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

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

索引器的声明:

索引器没有名称,在名称的位置是关键字this。

参数列表在方括号中间。

参数列表中必须至少声明一个参数。


简单声明一个索引器:

using System;

namespace 索引器
{
    class Program
    {
        static void Main(string[] args)
        {
            syq a = new syq();//实例一个类
            a[0] = "多多";//赋值
            a[1] = "少少";//赋值
            Console.WriteLine("_a 的值为:{0} \r\n_b 的值为:{1}",a[0],a[1]);//输出 取值
            Console.ReadKey();//按任意键
        }
    }
    class syq //类
    {
        private string _a;//私有字段
        private string _b;//私有字段

        public string this[int index]//索引器
        {
            set//设置值
            {
                if (index == 0)//判断传过来的值 是否为0
                {
                    _a = value;//为0 则将值赋值给 _a
                }
                else
                {
                    _b = value;//不为0 则将值赋值给 _b
                }
            }
            get//取值
            {
                return (index == 0) ? _a : _b;//三元运算符。
            }
        } 
    }
}

输出结果:

image.png


 索引器例子:

using System;
namespace 索引器1
{
    class Program
    {
        static void Main(string[] args)
        {
            Names p = new Names();//实例化类
            p[0] = "小猪爷爷";//赋值
            p[1] = "小猪奶奶";//赋值
            p[2] = "小猪爸爸";//赋值
            p[3] = "小猪妈妈";//赋值
            p[4] = "小猪佩奇";//赋值
            p[5] = "小猪乔治";//赋值
            for (int i = 0;i <= 5;i++)//循环
            {
                Console.WriteLine("p[{0}] 是 {1}", i,p[i]);//输出
            }
            Console.ReadKey();// 按任意键
        }
    }
    class Names // 类
    {
        private string[] name = new string[6]; //私有 字符串数组。
        public string this[int index] //索引器
        {
            set //设值
            {
                if (index >= 0 && index < name.Length) //判断参数是否大于等于0 和 小于数组长度
                {
                    name[index] = value; //赋值
                }
            }
            get //取值
            {
                string temp; //声明变量
                if (index >= 0 && index < name.Length) // 判断参数是否大于等于0 和 小于数组长度
                {
                    temp = name[index]; //取值
                }
                else
                {
                    temp = "";//为空
                }
                return temp;//返回值
            }
        }
    }
}

输出结果:

image.png


只要索引器的参数列表不同,类就可以有任意多个索引器。索引器类型不同是不够的,这叫做索引器重载,因为所有的索引器都有相同的“名称”:this访问引用。

类中重载的索引器必须有不同的参数列表。

索引器的重载例子:

using System;

namespace 索引器1
{
    class Program
    {
        static void Main(string[] args)
        {
            Names p = new Names();//实例化类
            p[0] = "小猪爷爷";//赋值
            p[1] = "小猪奶奶";//赋值
            p[2] = "小猪爸爸";//赋值
            p[3] = "小猪妈妈";//赋值
            p[4] = "小猪佩奇";//赋值
            p[5] = "小猪乔治";//赋值
            for (int i = 0;i <= 5;i++)//循环
            {
                Console.WriteLine("p[{0}] 是 {1}", i,p[i]);//输出
            }
            Console.WriteLine("——————————");//分割
            Console.WriteLine("小猪爸爸的索引为:{0}",p["小猪爸爸"]);//查找 小猪爸爸 的索引
            Console.WriteLine("小猪佩奇的索引为:{0}", p["小猪佩奇"]);//查找 小猪佩奇 的索引
            Console.WriteLine(" 蝙蝠侠 的索引为:{0}", p["蝙蝠侠"]);//查找 蝙蝠侠 的索引
            Console.ReadKey();// 按任意键
        }
    }
    class Names // 类
    {
        private string[] name = new string[6]; //私有 字符串数组。
        public string this[int index] //索引器
        {
            set //设值
            {
                if (index >= 0 && index < name.Length) //判断参数是否大于等于0 和 小于数组长度
                {
                    name[index] = value; //赋值
                }
            }
            get //取值
            {
                string temp; //声明变量
                if (index >= 0 && index < name.Length) // 判断参数是否大于等于0 和 小于数组长度
                {
                    temp = name[index]; //取值
                }
                else
                {
                    temp = "";//为空
                }
                return temp;//返回值
            }
        }
        public int this[string n] //索引器的重载
        {
            get//取值
            {
                int index = 0;//声明变量
                while (index < name.Length)//判断index的值是否小于 name数组的元素数量
                {
                    if (name[index] == n)//判断
                    {
                        return index;//返回索引
                    }
                    index++;//自增1
                }
                return -1;//如果没找到 则返回-1.
            }
        }
    }
}

输出结果:

image.png

扫描二维码推送至手机访问。

版权声明:本文由小道发布,如需转载请注明出处。

本文链接:https://www.daobk.com/post/109.html

分享给朋友:

“C# 索引器” 的相关文章

if语句应用:依次提示用户输入两个整数

if语句应用:依次提示用户输入两个整数

依次提示用户输入两个整数(假设i1、i2)。如果i1、i2都是正数,则将i1的值递增一个数,然后打印i1+i2的值;如果i1、i2都是负数,则将i1的值递减10个数,然后打印i1*i2的值;如果i1、i2中任一个为0,则提示数据有错误;否则计算i1*i2的绝对值。   ...

数组:将一个字符串数组输出为|分割的形式

数组:将一个字符串数组输出为|分割的形式

数组:将一个字符串数组输出为|分割的形式,比如“王钢蛋|李铁蛋|铁锤”            string[] s = { "王钢...

异常与异常处理

异常与异常处理

传统的错误表示方式:错误码。举例。需要知道不同错误码的含义,如果不处理错误码,则程序可能陷入不可以预置的错误。陈摄影师以为文件已经被删除造成的麻烦。错误码的缺点:不处理则很难发现,每次处理则很麻烦;难以看出错误的原因;容易使得程序进入不确定状态。try catch。Exception ex 异常也是...

第一个Windows程序

第一个Windows程序

WinForm:Windows Form,.Net中用来开发Windows窗口程序的技术,无论是之前学的控制台程序,还是后面要学的ASP.Net都是调用.Net框架,因此所有知识点都是一样的。新建一个Windows项目:Windows→Windows窗体应用程序控件:窗口上很多元素都是相似的,因此将...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。