第15天c#基础索引器

索引器

索引器(Indexer)是C#引入的一个新型的类成员,它使得类的对象可以像数组一样,使用下标访问,方便直观。索引器的功能类似于属性,它具有get和set方法,可以用来控制类中的数组、集合类成员。

访问修饰符 class 类名
{
    访问修饰符 返回值的数据类型 this[索引值的数据类型 标识符]
    {
        get { 获得数据的代码; }
        set { 设置数据的代码; }
    }
}

实例

    class Program
    {
        static void Main(string[] args)
        {
            Person p1 = new Person();
            //赋值
            p1[0] = "小玲";
            p1[1] = "小一";
            p1[2] = "小二";
            p1[3] = "小三";
            p1[4] = "小四";
            p1[5] = "小五";
            p1[6] = "小六";
            p1[7] = "小七";
            //取值
            for (int i = 0; i < Person.size; i++)
            {
                Console.WriteLine(p1[i]);
            }

            //根据名字取索引值
            Console.WriteLine(p1["小七"]);
        }
    }
    class Person
    {
        string[] name = new string[size];
        static public int size = 10;            //size要用static修饰 不然要放name上面
        public Person()
        {
            for (int i = 0; i < name.Length; i++)
            {
                name[i] = "";
            }
        }
        //格式:访问修饰符 类型 this[参数列表]
        //      {
        //          get块;
        //          set块;
        //      }
        public string this[int num]
        {
            get {
                return name[num];
            }
            set
            {
                    name[num] = value;
            }
            
        }

        //重载索引器
        public int this[string str]
        {
            get
            {
                int index = 0;
                while(true)
                {
                    if(name[index]== str)
                    {
                        return index;
                    }
                    index++;
                }
                return index;
            }
        }
    }

结果

1.当索引器赋值时,执行set块代码

2.当通过索引器访问时,执行get块代码

总结

1.索引器不能用static修饰符进行修饰

2.索引器没有名字,以this关键字来标识

3.索引器允许重载

4.索引器的参数类型不限定,参数个数不限定

重载运算符

定义

1.通过使用operator关键字定义静态成员函数来重载运算符

2.注意:必须用public修饰且必须是类的静态的方法

    class Program
    {
        static void Main(string[] args)
        {
            Vector v1 = new Vector(10, 10);
            Vector v2 = new Vector(20, 20);
            Vector v3 = v1 + v2;
            Console.WriteLine(v3);
        }
    }

    class Vector
    {
        public int x;
        public int y;

        public Vector(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        //格式:访问修饰符 static 返回值类型 operator 运算符(参数列表)
        //      {
        //          return 返回值;
        //      }
        public static Vector operator +(Vector v1, Vector v2)
        {
            Vector v3 = new Vector(v1.x + v2.x, v1.y + v2.y);
            return v3;
        }

        public override string ToString()           //重写ToString方法输出参数
        {
            return string.Format("({0},{1})", x, y);
        }

    }

作用

通过重载运算符可以是类或结构体的实例进行相关运算或比较运算

可重载的对象

总结

1.重载的运算符是几元那么参数就有几个

2.对于二元运算符,第一个参数是运算符左边的值,第二个参数是运算符右边的值

3.比较运算符要求成对重载,例如重载“==”的话必须重载“!=”

4.比较运算符的返回值必须是bool类型

5.true和false运算符必须成对重载

原文地址:https://www.cnblogs.com/yifengs/p/14089171.html