C#中索引器与属性有什么联系和区别?
索引器
具有集合性质的类一般应提供索引器,作用:在对象之外公开集合中的某一项
索引器:其实就是带参数的属性,在任何可以声明属性的地方都可以声明索引器,语法如下:
[访问修饰符] 数据类型 this[数据类型 标识符] { get{} set{} } eg:private int[] arr=new int[100]; public int this[int i] { get{return arr[i];} set{arr[i]=value;} }
1.索引器是属性的一种,它本质上和属性一样是方法。
2.索引器的类型和集合元素的类型一致
3.索引器没有自定义的名字(this关键字作为它的名字),而属性只能是自定义的名字
4.索引器至少有一个参数eg:this[int i],而属性不能带有参数,属性中的set有一个隐含的参数value
5.索引器可以重载,因此一个类中可以有多个索引器,调用时索引器通过数组下标索引,索引器是针对集合类型成员变量的,属性是不可以重载的 eg:Stu[0]=1; Stu[1]=2;
6.在接口中也可以声明索引器,接口索引器与类索引器的区别有两个:一是接口索引器不使用修饰符;二是接口索引器只包含访问器get或set,没有实现语句。访问器的用途是指示索引器是可读写、只读还是只写的,如果是可读写的,访问器get或set均不能省略;如果只读的,省略set访问器;如果是只写的,省略get访问器。在覆盖(override)实现索引器时,应该用base[E]来存取父类的索引器。
eg: public interface IAddress { string this[int index]{get;set;} string Address{get;set;} string Answer(); } 一个索引器、一个属性和一个方法,其中,索引器是可读写的。
7.属性可以为静态成员或实例成员,索引器必须为实例成员
属性
1.属性是封装的一种方法,是专门来控制访问性的一种语法结构,成员变量定义为私有类型(因为变量是表示对象特征的,不可以随便修改,为了安全性。)
2.Value是关键字,它的类型取决于属性的数据类型。
3.属性的访问修饰符总是public
4.当修改属性或为属性赋值时,将值先传给value,再赋给成员变量
5.属性的类型分为三类:只读(get)、读写(get&&set)、只写(set)
6.Set:set访问器,Get:get访问器
7.属性名与成员变量同名,书写时首写字母必须大写
8.属性的语法格式: 访问修饰符 返回类型 属性名 { get{} set{} } eg:private string name; public string Name { set{return name;} get{name=value;} }