.NET/C#中的索引器,運算子,指標

來源:互聯網
上載者:User

  我們為什麼需要索引器(indexer)這種玩意兒?

  當我們要定義一個自訂的集合類型時,比如EmployeeCollection , ManagerCollection .因為功能的需要,我們在這樣的類中,我們使用了泛型的集合類做儲存,還需要在類中封裝一些其它的必要的相關方法,比如計算工資的方法呀,查看員工有多少個WORKING DAYS的方法呀,之類的。這樣子,我們的泛型儲存集合類的索引器功能就被封裝在類裡頭了,而我們出於封裝的考量,不可能直接就用EmployeeCollection.EmployeeList[] ,這樣子來直接存取我們的內部儲存,於是我們就要把儲存集合類對象設定為私人,然後設定訪問它們的方法 : AddEmployee(), RemoveEmployee(),GetEmployee()這樣的方法。但是,這種做法真的稱不上簡潔,我們希望自訂的類也像集合類本身一樣支援這樣的 [] 使用方式,並且是安全的可以控制的方式來實現:

 

EmployeeCollection[0]=new Employee("name");

.  .  .

Console.WriteLine(EmployeeCollection[i].Name);

 

鑒於以上需求,就像曾經用屬性property封裝了某些私人成員變數一樣,這兒,我們也需要一種機制來把成員集合類來封裝起來,這個機制,就叫索引器(indexer)。如下:

 

public ElementsType this[int index]

{

  get{ return EmployeeList[index];};

  ser{ EmployeeList[index]=value;};

}

 

這兒我們使用了this[] 關鍵字組,這是個規定的文法,必須如此,然后里面有get ,set ,是不是跟property很像呀,呵呵。。。。。它就是指明了當使用前面的索引結構時,類集合如何返回,或者設定指定的元素。跟我們在類中自訂存取,存取方法的功能是一樣的。

 

當我們的自訂集合類中是使用List<T>這樣的使用int 索引的集合類型時,我們通過索引器用int 索引整個自訂集合類,當我們的自訂集合類中使用的是Dictionary<TKey,TValue>這樣的用string索引的集合類型時,我們的索引器也可以定義為用string 索引的訪問方式。具體用法查書。索引器有時候還可以被重載使用,甚至還可以定義多維的索引器。。。。。。

 

運算子多載,跟C++差球不多。。。但,C++中不能重載 +=,-=,在C#中可以了。並且,如果重載了+,-這樣的二無運算子,這些+=,-=功能自動就有了。LOOK,這就是語言的進化。。。。。

 

另外,C#中,類型轉化這種事情也可以自訂,比如你要將一個 Employee類的對象轉化為繼承自它的Manager類的對象,這個過程中發生的事情,可以自己定義。

 

一直在說,.NET平台有兩種主要的類型:實值型別,參考型別。但事實上還有一種類型:指標類型!使用指標類型,可以繞開CLR的記憶體管理機制,自己處理。這就是.NET中所謂的 unsafe 代碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.