索引器
一.索引器基本概念
基本概念:
让对象可以像数组一样通过索引访问其中的元素,使程序看起来更直观,更容易编写。
二.索引器语法
访问修饰符 返回值 this[参数类型 参数名,参数类型 参数名…..]
{
内部的写法和规则和索引器相同
get{}
set{}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Person{ private string name; private int age; private Person[] friends; public Person this[int index]{ get{ return friends[index]; } set{ friends[index]=value; } } }
|
三.索引器的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| namespace 语法知识 { class Person{ private string name; private int age; private Person[] friends; public Person this[int index]{ get{ return friends[index]; } set{ friends[index]=value; } } } internal class Program { static void Main(string[] args) { Person p=new Person(); p[0]=new Person(); Console.WriteLine(p[0]); } } }
|
四.索引器中可以写逻辑
get,set里面可以写逻辑,根据需求来处理内容。
因为在上面的索引器中,friends数组如果没有进行初始化,默认为空(即指针为null),此时如果进行索引,肯定会报错。外面可以在get与set中加一些逻辑判断避免报错。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Person{ private string name; private int age; private Person[] friends; public Person this[int index]{ get{ if(friends==null||friends.Length-1<index){ return null; } return friends[index]; } set{ if(friends==null){ friends=new Person[]{value}; }else if(index>friends.Length-1){ friends[friends.Length-1]=value; } friends[index]=value; } } }
|
五.索引器可以重载
重载的概念是——函数名相同,参数类型、数量、顺序不同
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class Person{ private string name; private int age; private Person[] friends; public string str1; private int [,] array; public int this[int i,int j]; { get{ return array[i,j]; }set{ array[i,j]=value; } } public string this[string str]{ get{ switch(str){ case"name": return this.name; case "age": return age.ToString(); } return ""; }set{ str=value; } }
Person p =new Person(); p[0,0]=10; p[str]="age";
|
在string 的这个索引器中,我们可以实现外面传入字符串来查找相关变量名的数据的功能,相当有意思。
索引器一定要配合数组使用!!!!!!!!!!
附:
索引器对我们来说的主要作用:可以让我们以中括号的形式自定义类中的元素,规则自己定,访问时和数组一样。
比较适用于在类中有数组变量时使用,可以方便的访问和进行逻辑处理。
结构体里面也是支持索引器的!!!