c 陣列賦初值 C 物件導向 索引器

2021-10-14 11:14:59 字數 4606 閱讀 2016

索引器:封裝了類的私有陣列的操作,沒有名字

定義索引器的格式:

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標準不支援在定義結構體的時候賦值,在定義結構體的時候並...