索引器:封裝了類的私有陣列的操作,沒有名字
定義索引器的格式:
public 陣列中元素的資料型別 關鍵字(this) [下標]
get//根據下標獲取陣列中該下標所對應的元素
//先判斷下標是否越界
if (下標 >= 私有陣列元素的個數)
throw new indexoutofrangeexception(「陣列越界」)
return 私有陣列[下標]
set//根據下標獲取給陣列中該下標所對應的元素賦乙個新值
//先判斷下標是否越界
if (下標 >= 私有陣列元素的個數)
throw new indexoutofrangeexception(「陣列越界」)
私有陣列[下標] = value;
怎樣訪問類的屬性::在其他類中,通過建立封裝索引器的類的例項(物件),通過該物件[下標]的形式來訪問索引器。這樣可以實現對類私有陣列的間接操作(一方面獲取欄位所儲存的值,另一方面給私有欄位賦乙個新的值)
什麼時候使用索引器?
(1)當有乙個集合的值屬於且只屬於類本身的時候,可以使用索引器。
索引器在使用時應注意:(1)this關鍵字用於定義索引器。(2)value關鍵字代表由set索引器獲得的值。(3)、索引器不一定根據整數值進行索引,由你決定索引器的引數的型別。(4)、索引器的裡面可以是任意引數列表。(5)索引器可被過載。
索引器和陣列比較:
(1)索引器的索引值(index)型別不受限制
(2)索引器允許過載
(3)索引器不是乙個變數
索引器和屬性的不同點
(1)屬性以名稱來標識,索引器以函式形式標識
(2)索引器可以被過載,屬性不可以
(3)索引器不能宣告為static,屬性可以
例1:public class grils
private string names = new string[5];
public string this[int n]
get
set
class program
static void main(string args)
grils gls = new grils();
gls[0] = "小嬋";//賦值呼叫set訪問器
string r = gls[0];//讀取呼叫get訪問器
console.writeline("",r);
例2、 以字串作為下標,對索引器進行訪問
public class indexerclass
//用string作為索引器下標的時候,要用hashtable
private hashtable name = new hashtable();
//索引器必須以this關鍵字定義,其實這個this就是類例項化之後的物件
public string this[string index]
get
public class test
static void main()
indexerclass indexer = new indexerclass();
indexer["a0001"] = "張三";
indexer["a0002"] = "李四";
console.writeline(indexer["a0001"]);
console.writeline(indexer["a0002"]);
例3、索引器的過載
public class indexerclass
private hashtable name = new hashtable();
//1:通過key訪問values
public string this[int index]
get
set
//2:通過values訪問key
public int this[string aname]
get//hashtable中實際存放的是dictionaryentry(字典)型別,如果要遍歷乙個hashtable,就需要使用到dictionaryentry
foreach(dictionaryentry d in name)
if (d.value.tostring() == aname)
return convert.toint32(d.key);
return -1;
setname.add(value, aname);
public class test
static void main()
indexerclass indexer = new indexerclass();
//第一種索引器的使用
indexer[1] = "張三";//set訪問器的使用
indexer[2] = "李四";
console.writeline("編號為1的名字:" + indexer[1]);//get訪問器的使用
console.writeline("編號為2的名字:" + indexer[2]);
console.writeline();
//第二種索引器的使用
console.writeline("張三的編號是:" + indexer["張三"]);//get訪問器的使用
console.writeline("李四的編號是:" + indexer["李四"]);
indexer["王五"] = 3;//set訪問器的使用
console.writeline("王五的編號是:" + indexer["王五"]);
例4:多參索引器。
using system;
using system.collections;
//入職資訊類
public class entrantinfo
private string name; //姓名
private int number;// 編號
private string department;// 部門
public entrantinfo()
public entrantinfo(string name, int num, string department)
this.name = name;
this.number = num;
this.department = department;
public string name
get
set
public int num
get
set
public string department
get
set
//宣告乙個類entrantinfo的索引器
public class indexerforentrantinfo
private arraylist arrlst;//用於存放entrantinfo類
public indexerforentrantinfo()
arrlst = new arraylist();
//宣告乙個索引器:以名字和編號查詢訪問部門資訊
public string this[string name, int num]
getforeach (entrantinfo en in arrlst)
if (en.name == name && en.num == num)
return en.department;
return null;
set//new關鍵字:c#規定,例項化乙個類或者呼叫類的建構函式時,必須使用new關鍵
arrlst.add(new entrantinfo(name, num, value));
//宣告乙個索引器:以編號查詢名字和部門
public arraylist this[int num]
getarraylist temp = new arraylist();
foreach (entrantinfo en in arrlst)
if (en.num == num)
temp.add(en);
return temp;
//還可以宣告多個版本的索引器...
public class test
static void main()
個蘋果。",length+1);
length++;
else
console.writeline("放滿了!!");
C 物件導向 索引器
一 索引器 indexer 允許類和結構的例項像陣列一樣通過索引取值,可以看做是對運算子的過載,索引器實際上就是有引數的屬性,也被稱為有參屬性或索引化屬性,其宣告形式與屬性相似,不同之處在於索引器的訪問器需要傳入引數 1.宣告索引器 class myclass set 使用索引器 myclass m...
C 物件導向 12 索引器
1 c 中提供了按照索引器進行訪問的方法。2 定義索引器的方式 string this int index set string為索引器的型別,中是引數列表。進行索引器寫操作就是呼叫set 塊,在set內部使用value得到使用者設定的值 進行讀操作就執行get 塊。3 索引器引數可以不止乙個,型別...
C語言結構體賦初值
舊的c標準不支援在定義結構體的時候賦值,例如vs2010和vc 6.0 之前我發現我寫的在vs2019上執行正常的程式複製到vc6上就報錯,一方面是因為舊的c標準不支援一些新函式比如scanf s和get s,另一方面是某些特性改變了,比如舊的c標準不支援在定義結構體的時候賦值,在定義結構體的時候並...