C#中為類添加索引器

來源:互聯網
上載者:User

昨天有朋友問我C#中索引器怎麼用的,給他解釋了一番。問問其他的人,也回答不會用。顯然的,因為覺得索引器不常用,都把它淡忘了,其實索引器我們經常在使用:訪問數組、集合元素時:array[i],訪問DataGridView、GridView時:gridView.DataKeys[index][“cellName”],ADO.NET中:DataReader[“columnName”]。等等,用的還是比較多的,因此很有必要瞭解下這東東。

1. 什麼是索引器

索引器允許類和結構的執行個體用下標進行訪問,這種方式類似於訪問數組、集合的元素,但不單單是通過下標,例如通過對象的各屬性值也是可以的。索引器寫在類或者結構中,其格式類似於:

?
public
object
this[intindex]{    get{returnobjects[int];
}
    set{ objects[int] = value; }}

索引器是特殊的屬性,可以有get、set訪問器,可以重載。object是返回的物件類型,this代表類或結構自己,int index表示索引類型。這與索引器的調用格式:對象[索引],相對應。下面我們通過例子來實踐下:我們寫個汽車類,為它添加索引器。

2. 為類添加索引器

首先建立Car類:

?
/// <summary>/// 汽車/// </summary>public
class
Car{    /// <summary>    /// 品牌    /// </summary>    publicstringBrand {get;set;
}
    /// <summary>    /// 顏色    /// </summary>    publicstringColor {get;set;
}
    /// <summary>    /// 覆蓋object的ToString()方法    /// </summary>    /// <returns></returns>    publicoverridestringToString()    {       
return string.Format("A {0} {1}.",this.Color,this.Brand);    }}

為汽車添加了品牌(Brand)與顏色(Color)屬性,並覆蓋了ToString()方法,用於顯示汽車的資訊。接著我們建立Cars類,在裡面添加索引器訪問Car:

?
/// <summary>/// 汽車集合/// </summary>public
class
Cars{    publicIList<Car> List {get;set;
}
    /// <summary>    /// 用下標訪問的索引器    /// </summary>    /// <param name="index">下標</param>    /// <returns>汽車</returns>    publicCarthis[intindex]    {       
get { returnthis.List[index]; }    }    /// <summary>    /// 用品牌訪問的索引器    /// </summary>    /// <param name="brand">品牌</param>    /// <returns>汽車</returns>    publicCarthis[stringbrand]    {       
get       
{           
for (inti = 0; i < List.Count; i++)               // 為false的情況較多,所以這裡用Equals比較,               // 而不用==,具體為什麼,請看我的前一篇隨筆               // 《C# 中“Equals”與“==”的速度比較》               //http://www.cnblogs.com/ju2ender/archive/2010/03/21/1691033.html               if(brand.Equals(this.List[i].Brand))                   returnthis.List[i];           
return null;       
}    }}

Cars有個Car集合,寫了兩個索引器,分別用下標和汽車品牌進行訪問,構成了重載,這裡若不寫下標索引器是不能用cars[index]訪問Car的。下面我們編寫入口,測試索引器是否起作用了,執行個體化3輛車:黑色寶馬、紅色平治、黃色保時捷。

?
public
class
Program{    publicstaticvoidMain(string[]
args)
    {       
Cars cars = newCars       
{           
List = new
List<Car>
           
{               newCar { Brand ="BMW", Color ="Black"},    //
黑色寶馬
               newCar { Brand ="Benz", Color ="Red"},     //
紅色平治
               newCar { Brand ="Porsche", Color ="Yellow"}//
黃色保時捷
           
}       
};       
Console.Title = "索引器";       
Console.WriteLine(cars[0].ToString());       
Console.WriteLine(cars["Porsche"].ToString());       
Console.ReadLine();    }}

分別用下標和品牌進行了訪問,下面是運行結果:

樣本項目名為OOP,點這裡下載。

 

轉自:http://www.cnblogs.com/ju2ender/archive/2010/03/27/1698528.html

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.