1. 程式人生 > >《Inside C#》筆記(六) 屬性、數組、索引器

《Inside C#》筆記(六) 屬性、數組、索引器

適合 length image 避免 mage str com arr 查看

一 屬性

a) 屬性可用於隱藏類的內部成員,對外提供可控的存取接口。屬性相當於有些語言的getter、setter方法,只是使用起來更加方便一點,而且查看對應的IL碼可以看到,屬性的本質也確實是方法。

b) 通過只提供get,可以讓屬性只讀。只寫屬性也可以,但沒有用過。

c) 屬性除了用來控制對類成員的訪問外,還可以在get或set的時候通過編碼進行一些附加的動作。

d) 屬性也可以被繼承、重寫。

二 數組

a) 在C#中,所有數組都繼承自System.Array類。數組也是對象,所以聲明的數組在使用前必須實例化。

b) 數組的Length屬性指的是數組中所有的元素個數,這一點在多維數組中尤其要註意。如果想取得某一行的元素個數,可以使用.GetLength(<行數>)方法。通過Rank屬性可以取得數組的維數。

c) 不規則數組(Jagged Array),不規則數組的元素是數組,每個數組的維數和長度可以不相同。聲明方式如下:

技術分享

C語言用類似這樣的方式來聲明多維數組,但C#聲明多維數組的方式為:

技術分享

要避免混淆。

三 索引器

a) 通過索引器可以像使用數組一樣使用類成員。索引器與屬性類似,都提供對類成員的某種操作方式。

b) 索引器的聲明方式與屬性略微有差別,主要在於索引器的名稱只能是this,因為要把類名稱當作數組來使用,所以不能有另外的名稱

技術分享

c) 索引器可以有重載,使用不同的參數組合來設置不同的索引方式。另外,據說索引器不能是靜態的,本來想著將被索引內容也聲明為靜態就可以,但試了一下還確實不行,網絡上有人的解釋是:CLR支持靜態索引器,但C#不支持。

d) 要註意索引器的使用場合(目前菜鳥的我還沒遇到適合的場合),在恰當的地方使用可以帶來方便,但對索引器的濫用卻會帶來各種問題,比如可讀性的降低,invoice.Name顯然是比invoice[2]直觀的。

《Inside C#》筆記(六) 屬性、數組、索引器