属性(property):
public string Name {get{return _name;}set{_name = value;} }
简写为:
public string Name { set; get;}
索引器(index):
索引器为C#程序语言中泪的一种成员,它是的对象可以像数组一样被索引,使程序看起来更直观,更容易编写。
索引器和数组比较:
(1)索引器的索引值(Index)类型不受限制
(2)索引器允许重载
(3)索引器不是一个变量
索引器和属性的不同点
(1)属性以名称来标识,索引器以函数形式标识
(2)索引器可以被重载,属性不可以
(3)索引器不能声明为static,属性可以
要声明类或结构上的索引器,请使用this关键字,例如:
public int this[int index] //声明索引器 {// get and set 访问 }
索引器的修饰符有:new、public、protected、internal、private、virtual、sealed、override、abstract和extern。
当索引器声明包含extern修饰符时,称该索引器为外部索引器。因为外部索引器声明不提供任何实际的实现,所以它的每个访问器声明都由一个分号组成。
索引器的签名由其形参的数量和类型组成。它不包括索引器类型或形参名。如果在同一类中声明一个以上的索引器,则它们必须具有不同的签名。
索引器值不归类为变量;因此,不能将索引器值作为ref或out参数来传递。
索引必须是实例成员。
索引器使用示例:
using System; class IndexerRecord {private string [] data = new string [6];private string [] keys = {"Author", "Publisher", "Title","Subject", "ISBN", "Comments" }; //注:程序中用了两种方法来索引://一是整数作下标,二是字符串(关键词名)作下标public string this[ int idx ]{set{if( idx >= 0 && idx < data.Length )data[ idx ] = value;}get{if( idx >= 0 && idx < data.Length )return data[ idx ];return null;}}public string this[ string key ]{set{int idx = FindKey( key );this[ idx ] = value;}get{return this[ FindKey(key) ];}}private int FindKey( string key ){for( int i=0; i<keys.Length; i++)if( keys[i] == key ) return i;return -1;}static void Main(){IndexerRecord record = new IndexerRecord();record[ 0 ] = "马克-吐温";record[ 1 ] = "Crox出版公司";record[ 2 ] = "汤姆-索亚历险记";Console.WriteLine( record[ "Title" ] );Console.WriteLine( record[ "Author" ] );Console.WriteLine( record[ "Publisher" ] );Console.ReadKey(true);} }