索引器
索引器(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运算符必须成对重载