C# 基礎知識 (一).概念與思想篇
在C#中有一些我自己認為比較獨特的知識點,這些知識點是我經常使用的知識,但對它們的了解還是比較少的,所以通過查找資料學習,總結了這些獨特的知識點並簡單敘述,第一篇主要是一些概念和思想方麵的知識。(後麵還有C#其他篇的文章)
一.C#概念
C#語言是從C和C++語言演變而來的,是微軟創建的一門麵向對象、運行在.NET Framework上的高級程序語言,是Windows的一個必要組件,包括一個稱為公共語言運行時(common language runtime,CLR)的虛擬執行係統和一組統一的類庫。(C#源文件擴展名為.cs)
C#與Java有很多相似的地方:繼承、接口、聲明命名空間(using&import)、從Main入口點開始執行、源代碼被編譯成中間狀態等。同時也有明顯不同之處:C#借鑒了Delphi的與COM是直接集成的特點、它們所執行的平台也不相同,Java運行環境JRE(Java Runtime Environment),C#運行環境CLR(Common Language Runtime),且CLR支持多種語言;同時C#提供封箱裝箱等方法。
二.麵向對象思想
麵向對象是將客觀事物看做屬性和行為的對象,通過抽象同一類對象的共同屬性和行為,形成類。通過對類的繼承和多態實現代碼重用等。對象(Object)是類(Class)的一個實例(Instance),如果將對象比作房子,那麼類就是房子的設計圖(類中定義包括屬性和方法)。
麵向對象的三個基本特征為:
(1).封裝:把客觀事物封裝成抽象的類,類中數據和方法隻讓可信類或對象操作,不可信的隱藏(內部細節)
(2).繼承:它可使用類的所有功能,無需重新編寫原有類且對功能進行擴展
(3).多態:一般類中定義的屬性或行為,被特殊類繼承後,可以具有不同的數據類型或表現不同的行為,各個類能表現不同的語義,實現的兩種方法為覆蓋和重載
通過下麵的例子來講解麵向對象:
例1:讓你編寫一個計算長方體體積的程序,通常的思想是定義3個變量長=a,寬=b,高=c,體積v=a*b*c;而在麵向對象思想中先創建一個長方體的類,在類中定義長寬高和體積,然後定義方法,在實例化使用。(C++代碼)
class Rect { public: void showArea(…); //定義方法:計算長方體體積 private: float a,b,c,v; //定義屬性:長 寬 高 體積(私有成員) } void Rect::showArea(…) {…}
這樣的好處是它是站在事物本身的角度去思考解決問題,如果上麵采用麵向過程定義函數的形式實現,當出現多個形狀時,你需要對每一種形狀都定義一種方法,而麵向對象隻需把這些形狀的屬性和方法抽象出來,更加方麵的實現。
值得注意的是,麵向對象提供的是一種思想,而非僅僅是課本中的那點知識,很多時候我們僅僅是把使用了C++、C#或Java一門麵向對象的語言,或者是定義了幾個類、使用繼承等知識就認為自己運用了麵向對象(我就是這樣的);但我更認為麵向對象是一種思想,一種更好的解決實際問題的方法。比如有這樣一個問題:
例2:為了方便兒童學習編程,X公司開發了一套Racing Car 模擬器,使用這個模擬器每個孩子都可以用一種簡單的語言來控製一輛賽車,例如,right,left等。請設計一種簡單的語言,給出它的語法,以及該語言的類圖。
這就是我們實際編程中聯係到生活的問題,它涉及到了設計模式的相關知識,其中我采用的方法是“命名模式”實現的:客戶端是定義Children和Car,請求者是Children發出的Right\Left\Up\Down命令,接受實現者是Car執行Move(),抽象命令是上下左右的抽象接口,具體命令是Car的上下左右。我製作的類圖如下:
通過這個例子我不是想證明我采用命令模式和畫的類圖是否正確,我想闡述的想法是我們學習麵向對象知識主要是用來解決實際生活中的問題,讓它更加高效的解決問題和優化代碼。在學習《設計模式》時老師就曾說過“模式是現成的,但實現方法要靠自己;同時,學習的時候要敢於否認自己以前很熟悉的套路,甚至經典套路,隻要能更加高效正確的完成項目,你的模式就很可能就是經典。”所以,我才認為麵向對象是一種思想,不是宏觀的C語言就是麵向過程,C++、C#就是麵向對象。
同時,麵向對象思想要適應需求的變化,解決用戶的實際需求,在設計時就要盡量考慮到變化,會涉及到抽象、封裝變化(重點)、設計模式等知識。補充:C#中的對象都是System.Object的子類,即所有對象都繼承System.Object,這樣的好處是所有的對象都可以有公用的方法,如ToString()方法。
三.總結
上麵的內容主要是我對C#基礎知識的一些自己理解,很可能我理解思想是錯誤的,但我更希望提供一種自己的思想與大家分享。同時,由於知識有限,做的項目也少,可能理解有錯誤的地方或還沒有理解更深層的地方,見諒!最後希望幾十年後的自己也能像很多大神一樣回過頭來對年少時的自己寫的這些博文做些更深入的分析,在根據那時的經曆寫出更優秀的閱曆與大家分享更深刻的經驗!鼓勵自己與大家加油。
(By:Eastmount 2013-8-20 夜1點)
參看一些書籍孫景瑞的《從零開始學C#》、羅剛的《使用C#開發搜索引擎》、《設計模式》課件、同時參考了CSDN論壇中一篇關於麵向對象的討論,個人認為非常不錯。https://bbs.csdn.net/topics/220013605
最後更新:2017-04-03 16:48:59