詳解C#引用類型
C#引用類型
和值類型相比,C#引用類型不存儲它們所代表的實際數據,但它們存儲實際數據的引用。在C#中提供以下引用類型給你使用:
◆對象類型
◆類類 型
◆接口
◆代表元
◆字符串類型
◆數組
1.對象類型
對象類型是所有類型之母——它是其它類型最根本的基類。因為它是所有對象的基類,所以可把任何類型的值賦給它。給所有的C++程序員一個警告:object并不等價于你可能正在尋找的void*.無論如何,忘掉指針總是個好主意。當一個值類型被加框(作為一個對象利用)時,對象類型就被使用了。這一章稍后會討論到加框和消框
2.類類型
一個類類型可以包含數據成員、函數成員和嵌套類型。數據成員是常量、字段和事件。函數成員包括方法、屬性、索引、操作符、構造函數和析構函數。類和結構的功能是非常相似的,但正如前面所述,結構是值類型而類是引用類型。
和C++相比,僅允許單繼承。(你不能擁有派生一個新對象的多重基類。) 但是,C#中的一個類可以派生自多重接口,該接口在下一節將得到描述。
第五章 "類"專門討論使用類編程。這一節僅打算給出C#類在哪里適合類型圖的一個全貌。
3.接口
一個接口聲明一個只有抽象成員的引用類型。跟C++中相似的概念為:一個結構的成員,且方法等于0.如果你不知道那些概念的任何東西,這里就是在C#中一個接口實際所做的。僅僅只存在著方法標志,但根本就沒有執行代碼。這就暗示了不能實例化一個接口,只能實例化一個派生自該接口的對象。
可以在一個接口中定義方法、屬性和索引。所以,對比一個類,接口有什么特殊性呢?當定義一個類時,可以派生自多重接口,而你只能可以從僅有的一個類派生。
我說很多類可以實現這個接口——所以,你可以在多個地方重用代碼來訪問IDictionary 接口!一旦學會,任何地方都可使用。當你決定在類設計中使用接口時,學習更多關于面向對象的設計是個好主意。這本書不能教你這些概念,但你可以學習如何創建接口。
正如我所提到的,不能從這個定義實例化一個對象,但可以從它派生一個類。因此,該類必須實現ShowMyFace抽象方法
接口成員和類成員的區別在于,接口成員不能被實現。因此,我不想在下一章中再次提到這一點。
4.代表元
一個代表元封裝了具有一些標志的一個方法。基本上,代表元是類型安全和函數指針的安全版本(回調功能)。可以同時在一個代表元實例中同時封裝靜態和實例方法。
盡管你可以用代表員當作具有方法,但它們的主要用途是擁有有一個類事件。再次,我想把你引到下一章,那里會詳細地討論類。
5.字符串類型
C程序員可能會詫異,但當然,C#有一個用于操作字符串數據的基本字符串類型。字符串類直接派生自對象,且它是被密封的,這意味著再不能從它派生類。就象其它類型,字符串是預定義類System String的一個別名。
我只不過想提到,盡管字符串是一個引用類型,比較時是比較值,而不是比較引用(內存地址)。字符串類型幾乎用于這本書的每一個例子中,而且在這些例程中,我會介紹給你一些由字符串對象所顯露的極其有趣的方法。
6.數組
一個數組包含有通過計算下標訪問的變量。所有包含于數組中且被當作元素的變量必須是同一類型。這種類型自然被稱為"數組類型".數組可以存儲整數對象、字符串對象或者 你提出的任何對象。
數組的維數就是所謂的排(rank),它決定了相關數組元素的下標數。最常用的數組是一維數組(第一排)。一個多維數組具有的排數大于1 .每個維的下標始于0,終于維的長度減1 .
應有足夠的理論支持。讓我們看一下用一個數組初始化器( array initializer)初始化的數組。以上介紹C#引用類型。
【編輯推薦】