天天看點

C#是面向對象程式設計語言

C#是純粹的面向對象程式設計語言,它真正展現了“一切皆為對象”的精神。在C#中,即使是最基本的資料類型,如int,double,bool類型,都屬于System.Object類型。此外,使用C#程式設計,不會存在與遊離于對象之外的屬于過程的東西。

這個世界是由什麼組成的?這個問題如果讓不同的人來回答會得到不同的答案。如果是一個化學家,他也許會告訴你“還用問嘛?這個世界是由分子、原子、離子等等的化學物質組成的”。如果是一個畫家呢?他也許會告訴你,“這個世界是由不同的顔色所組成的”。……呵呵,衆說紛纭吧!但如果讓一個分類學家來考慮問題就有趣的多了,他會告訴你“這個世界是由不同類型的物與事所構成的”。好!作為面向對象的程式員來說,我們要站在分類學家的角度去考慮問題!是的,這個世界是由動物、植物等組成的。動物又分為單 細胞動物、多細胞動物、哺乳動物等等,哺乳動物又分為人、大象、老虎……就這樣的分下去了!

那麼什麼是“面向對象思想”?其精要當然是“一切皆為對象”的意義。軟體的開發與設計,是圍繞着開發的目标進行的。比如開發一個電子商務網站,那麼與電子商務有關的都是我們要操作和關心的,商品、訂單、使用者、目錄、購物車等等,都是對象。如果要開發一個論壇,那麼論壇中必備的要素,如論壇分類、主題、文章、評論、使用者,也全都是對象。從小處說,我們要求寫一個算法用以計算階乘,那麼起始值、運算結果、以及整個算法都是對象。

那麼對象具有什麼特質?一般而言,一個對象應具有屬性和行為。以現實世界為例,“人”作為一種特殊的動物,也是我們所稱謂的“對象”。這個對象具有很多屬性,例如姓名,身高、體重、民族、國籍、出生年月等等。而行為呢,可以是行走、吃飯、跑步、乃至于玩遊戲、踢足球。如果從詞義學的角度來看,屬性更偏向于名詞的範疇,而行為則近乎于動詞。然而對象也有特殊的情況,或者隻具有屬性,或者隻具有行為。例如身份證,可能隻具有姓名,出生年月,籍貫,身份證号等屬性,而沒有行為。例如“飛”,這本身是一種動作,但同樣可以認為是一種行為。

然而這種劃分并非絕對,根據實際情況,同一種對象具有的屬性和行為可能不一樣。例如同樣是“人”,如果是要開發一個戶籍管理系統,我們就不必去考慮行走、吃飯、跑步等行為,但如果是一個足球遊戲,那麼對象“人”,就需要各種踢足球的動作作為該對象的行為了。再比如“身份證”對象,也可能為了使用友善,會為它添加“IsValidate”這樣一個行為。

還要注意的是,很多時候屬性其實本身也是一個對象,例如姓名,可以是string類型,它屬于Sytem.Object對象類型,我們也可以單獨為姓名建立一個類對象:

public class Name

{

public string FirstName;

public string MiddleName;

public string LastName;

}

在C#裡,有各種各樣的對象類型,除了本身提供的基本類型外,還支援自定義各種類型,包括class,struct,enum,interface,delegate,event。以前面的例子來看,對象Person“人”,就可以被定義為class類型,國籍可以被定義為enum類型。沒有行為的身份證,也可以被定義為struct類型。動作“飛”可以被定義為interface類型。至于delegate和event,則是一種特殊對象類型,例如我們可以為論壇管理系統,定義一系列事件,如BeforePost,AfterPost等等。