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;}      }    

 

posted on 2013-10-09 23:19  daisy_thq  阅读(630)  评论(0编辑  收藏  举报