C#索引器(Indexers)---逐步解析与理解(一)
C#索引器是什么?
C#中索引器是类的成员,如果我们在类中定义索引器,类就可以像虚拟数组一样,所以说索引器做为类的成员,可以像数组一样处理类中的成员;
案例:C#索引器
以一个案例来理解C#索引器;创建一个控制台应用程序,再创建一个Employee类,然后输入以下代码,下面这个类简单易懂,只是定义了一些属性,通过构造函数进行初始化;
1 namespace IndexersDemo 2 { 3 public class Employee 4 { 5 //Declare the properties 6 public int ID { get; set; } 7 public string Name { get; set; } 8 public string Job { get; set; } 9 public double Salary { get; set; } 10 public string Location { get; set; } 11 public string Department { get; set; } 12 public string Gender { get; set; } 13 14 //Initialize the properties through constructor 15 public Employee(int ID, string Name, string Job, int Salary, string Location, 16 string Department, string Gender) 17 { 18 this.ID = ID; 19 this.Name = Name; 20 this.Job = Job; 21 this.Salary = Salary; 22 this.Location = Location; 23 this.Department = Department; 24 this.Gender = Gender; 25 } 26 } 27 }
创建Employee类的实例,像数组一样使用employee对象;创建主函数,用索引处理Employee数据;
1 using System; 2 namespace IndexersDemo 3 { 4 class Program 5 { 6 static void Main(string[] args) 7 { 8 //Creating the Employee instance 9 Employee emp = new Employee(101, "Pranaya", "SSE", 10000, "Mumbai", "IT", "Male"); 10 11 //Accessing Employee Properties using Indexers i.e. using Index positions 12 Console.WriteLine("EID = " + emp[0]); 13 Console.WriteLine("Name = " + emp[1]); 14 Console.WriteLine("Job = " + emp[2]); 15 Console.WriteLine("Salary = " + emp[3]); 16 Console.WriteLine("Location = " + emp[4]); 17 Console.WriteLine("Department = " + emp[5]); 18 Console.WriteLine("Gender = " + emp[6]); 19 20 Console.ReadLine(); 21 } 22 } 23 }
然后调试程序,会有如下错误提示:
这是因为我们不能直接将索引应用到类中。我们能在数组中应用索引,但是我们不能在Employee这种用户自定义类中这么做;数组array是预定义类,类中的索引动作都有逻辑进行执行,这样我们就能用索引器进行程序处理。但是,Employee类是用户自定义类,我们无法 像数组那样使用预定义的逻辑处理用户自定义类。
如果希望像数组一样处理类,首先需要在类中定义索引器;一旦在类中定义了索引器,就能使用索引位置处理类的值。
c#中如何定义索引器?
需要按照下述句法规则在类中定义索引器
让我们解读一下上面的语法:
1、修饰符:修饰符没什么可说的,就是诸如public ,private ,protected等待访问说明符(access specifiers);
2、类型:如上面处理过的integer整型(ID),string(Name,job ,Location,and Gender),还有double类型,所以这里我们需要用到对象类型,Object类型可以返回任意类型;
3、This:This关键字告诉我们,我们在当前类中定义了索引器,当前类是Employee;
4、int index 或string name : int索引类型或字符串string类型是用来表示索引器使用哪个类型的索引来存取数组元素,可以是整型,也可以是字符串类型。
5、Get 和 Set:get存取器(Accessor)用来返回某个元素;set存取器用来设定某个元素的值;
实例:C#索引器