目錄
Hello!大家好,我是努力賺錢買生髮水的灰小猿!
最近在用C#做開發的時候要用到索引函數,所以今天就在這裏和小夥伴記錄一下C#中索引器的實現。
什麼是索引器?
在C#中,索引器允許類或結構的實例按照和數組相同的方式進行索引,索引器類似於屬性,不同之處在於他們的訪問採用參數,而實際上,索引器提供了一種訪問類或結構的方法,即允許按照和類、結構或接口相同的方式進行索引,它的引入的目的是爲了讓程序更加的直觀便於理解。
如何聲明索引器?
索引器提供了一種特殊的方法,來對類或結構體中的對象進行賦值和訪問,要在類或結構上聲明索引器,需要使用this關鍵字,索引器的定義格式如下:
[修飾符] 數據類型 this[索引類型 index]
{
get{//獲得屬性的代碼}
set{ //設置屬性的代碼}
}
其中修飾符包括:public,protected,private,internal,new,virtual,sealed,override,abstract,extern.
數據類型是表示將要存取的數組或集合元素的類型,如string、int等。
this關鍵字引用當前類的實例,從中可以看到,對索引器和對普通屬性一樣,爲它提供set和get訪問器,這些訪問器指定使用該索引器時將引用什麼內部成員。
索引器類型表示該索引器使用哪一類型的索引來存取數組或集合元素,可以是整數同時也可以是字符串。
索引器和屬性的異同對比
在定義上,索引器和屬性相似,具有如下的相似點:
- 它們都屬於函數成員,都不用分配內存來存儲。
- 它們都主要用來被訪問其他數據成員,與這些數據成員相關聯,並且爲這些成員提供獲取和設置訪問。
索引器和屬性的區別如下:
- 屬性允許調用方法,如同它們是公共數據字段,索引器允許調用對象的方法,如同對象是一個數組。
- 屬性可以通過簡單的名稱進行訪問,索引器可以通過索引器進行訪問。
- 屬性可以作爲靜態成員或實例成員,索引器必須作爲實例成員。
- 屬性的get訪問器沒有參數,索引器的get訪問器具有和索引器相同的形參表。
- 屬性的set訪問器包含隱藏value參數,索引器的set訪問器除了value參數外,還具有和索引器相同的形參表。
索引器實例分析
比如下面這個程序,
定義一個課程類Couse,在該類中定義三個私有成員Chinese、English、Math,通過索引函數訪問該類的私有成員,並對這三個私有成員進行讀寫操作。
首先是定義Couse類,並在該類中實現索引器:
//定義類Couse
class Couse
{
//定義私有成員變量
private float Chinese;
private float English;
private float Math;
//定義索引器,該索引器的修飾符是public,數據類型是float,索引類型是string
public float this[string name]
{
//定義get方法對成員進行讀取
get
{
switch (name)
{
case "語文":
return Chinese;
case "英語":
return English;
case "數學":
return Math;
default:
return 0;
}
}
//定義set方法對成員進行寫入
set
{
switch (name)
{
case "語文":
Chinese = value;
break;
case "英語":
English = value;
break;
case "數學":
Math = value;
break;
}
}
}
}
在主類中調用Couse類和索引器,對成員變量進行讀寫:
class Program
{
static void Main(string[] args)
{
//新建一個對象接收Couse類
Couse couse = new Couse();
couse["語文"] = 100; //通過“語文”索引對Chinese進行賦值
couse["英語"] = 99; //通過“英語”索引對English進行賦值
couse["數學"] = 98; //通過“數學”索引對Math進行賦值
//通過相應的索引獲取到成員的值並輸出
Console.WriteLine("語文:" + couse["語文"]);
Console.WriteLine("英語:" + couse["英語"]);
Console.WriteLine("數學:" + couse["數學"]);
}
}
運行結果如下:
在上述程序中首先在定義Couse類並在其中設置索引器,之後在主方法中調用該類,並通過索引對成員變量進行賦值,之後再通過索引對相應的成員變量進行調用。
好了,內容不多也好理解。
覺得不錯記得點贊關注大灰狼喲!
同時有喜歡Python的小夥伴也可以關注我的微信公衆號“灰狼洞主”後臺回覆“Python筆記”獲取Python從入門到精通筆記分享和Python常用函數方法速查手冊喲!
大灰狼期待與你一同進步!