C# 基础知识 (一).概念与思想篇
在C#中有一些我自己認(rèn)為比較獨(dú)特的知識(shí)點(diǎn),這些知識(shí)點(diǎn)是我經(jīng)常使用的知識(shí),但對(duì)它們的了解還是比較少的,所以通過查找資料學(xué)習(xí),總結(jié)了這些獨(dú)特的知識(shí)點(diǎn)并簡(jiǎn)單敘述,第一篇主要是一些概念和思想方面的知識(shí)。(后面還有C#其他篇的文章)
一.C#概念
C#語言是從C和C++語言演變而來的,是微軟創(chuàng)建的一門面向?qū)ο蟆⑦\(yùn)行在.NET Framework上的高級(jí)程序語言,是Windows的一個(gè)必要組件,包括一個(gè)稱為公共語言運(yùn)行時(shí)(common language runtime,CLR)的虛擬執(zhí)行系統(tǒng)和一組統(tǒng)一的類庫。(C#源文件擴(kuò)展名為.cs)
C#與Java有很多相似的地方:繼承、接口、聲明命名空間(using&import)、從Main入口點(diǎn)開始執(zhí)行、源代碼被編譯成中間狀態(tài)等。同時(shí)也有明顯不同之處:C#借鑒了Delphi的與COM是直接集成的特點(diǎn)、它們所執(zhí)行的平臺(tái)也不相同,Java運(yùn)行環(huán)境JRE(Java Runtime Environment),C#運(yùn)行環(huán)境CLR(Common Language Runtime),且CLR支持多種語言;同時(shí)C#提供封箱裝箱等方法。
二.面向?qū)ο笏枷?/span>
面向?qū)ο笫菍⒖陀^事物看做屬性和行為的對(duì)象,通過抽象同一類對(duì)象的共同屬性和行為,形成類。通過對(duì)類的繼承和多態(tài)實(shí)現(xiàn)代碼重用等。對(duì)象(Object)是類(Class)的一個(gè)實(shí)例(Instance),如果將對(duì)象比作房子,那么類就是房子的設(shè)計(jì)圖(類中定義包括屬性和方法)。
面向?qū)ο蟮娜齻€(gè)基本特征為:
(1).封裝:把客觀事物封裝成抽象的類,類中數(shù)據(jù)和方法只讓可信類或?qū)ο蟛僮?#xff0c;不可信的隱藏(內(nèi)部細(xì)節(jié))
(2).繼承:它可使用類的所有功能,無需重新編寫原有類且對(duì)功能進(jìn)行擴(kuò)展
(3).多態(tài):一般類中定義的屬性或行為,被特殊類繼承后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)不同的行為,各個(gè)類能表現(xiàn)不同的語義,實(shí)現(xiàn)的兩種方法為覆蓋和重載
通過下面的例子來講解面向?qū)ο?#xff1a;
例1:讓你編寫一個(gè)計(jì)算長(zhǎng)方體體積的程序,通常的思想是定義3個(gè)變量長(zhǎng)=a,寬=b,高=c,體積v=a*b*c;而在面向?qū)ο笏枷胫邢葎?chuàng)建一個(gè)長(zhǎng)方體的類,在類中定義長(zhǎng)寬高和體積,然后定義方法,在實(shí)例化使用。(C++代碼)
class Rect { public:void showArea(…); //定義方法:計(jì)算長(zhǎng)方體體積 private:float a,b,c,v; //定義屬性:長(zhǎng) 寬 高 體積(私有成員) } void Rect::showArea(…) {…}這樣的好處是它是站在事物本身的角度去思考解決問題,如果上面采用面向過程定義函數(shù)的形式實(shí)現(xiàn),當(dāng)出現(xiàn)多個(gè)形狀時(shí),你需要對(duì)每一種形狀都定義一種方法,而面向?qū)ο笾恍璋堰@些形狀的屬性和方法抽象出來,更加方面的實(shí)現(xiàn)。
值得注意的是,面向?qū)ο筇峁┑氖且环N思想,而非僅僅是課本中的那點(diǎn)知識(shí),很多時(shí)候我們僅僅是把使用了C++、C#或Java一門面向?qū)ο蟮恼Z言,或者是定義了幾個(gè)類、使用繼承等知識(shí)就認(rèn)為自己運(yùn)用了面向?qū)ο?#xff08;我就是這樣的);但我更認(rèn)為面向?qū)ο笫且环N思想,一種更好的解決實(shí)際問題的方法。比如有這樣一個(gè)問題:
例2:為了方便兒童學(xué)習(xí)編程,X公司開發(fā)了一套R(shí)acing Car 模擬器,使用這個(gè)模擬器每個(gè)孩子都可以用一種簡(jiǎn)單的語言來控制一輛賽車,例如,right,left等。請(qǐng)?jiān)O(shè)計(jì)一種簡(jiǎn)單的語言,給出它的語法,以及該語言的類圖。
這就是我們實(shí)際編程中聯(lián)系到生活的問題,它涉及到了設(shè)計(jì)模式的相關(guān)知識(shí),其中我采用的方法是“命名模式”實(shí)現(xiàn)的:客戶端是定義Children和Car,請(qǐng)求者是Children發(fā)出的Right\Left\Up\Down命令,接受實(shí)現(xiàn)者是Car執(zhí)行Move(),抽象命令是上下左右的抽象接口,具體命令是Car的上下左右。我制作的類圖如下:
?
通過這個(gè)例子我不是想證明我采用命令模式和畫的類圖是否正確,我想闡述的想法是我們學(xué)習(xí)面向?qū)ο笾R(shí)主要是用來解決實(shí)際生活中的問題,讓它更加高效的解決問題和優(yōu)化代碼。在學(xué)習(xí)《設(shè)計(jì)模式》時(shí)老師就曾說過“模式是現(xiàn)成的,但實(shí)現(xiàn)方法要靠自己;同時(shí),學(xué)習(xí)的時(shí)候要敢于否認(rèn)自己以前很熟悉的套路,甚至經(jīng)典套路,只要能更加高效正確的完成項(xiàng)目,你的模式就很可能就是經(jīng)典。”所以,我才認(rèn)為面向?qū)ο笫且环N思想,不是宏觀的C語言就是面向過程,C++、C#就是面向?qū)ο蟆?/p>
同時(shí),面向?qū)ο笏枷胍m應(yīng)需求的變化,解決用戶的實(shí)際需求,在設(shè)計(jì)時(shí)就要盡量考慮到變化,會(huì)涉及到抽象、封裝變化(重點(diǎn))、設(shè)計(jì)模式等知識(shí)。補(bǔ)充:C#中的對(duì)象都是System.Object的子類,即所有對(duì)象都繼承System.Object,這樣的好處是所有的對(duì)象都可以有公用的方法,如ToString()方法。
三.總結(jié)
上面的內(nèi)容主要是我對(duì)C#基礎(chǔ)知識(shí)的一些自己理解,很可能我理解思想是錯(cuò)誤的,但我更希望提供一種自己的思想與大家分享。同時(shí),由于知識(shí)有限,做的項(xiàng)目也少,可能理解有錯(cuò)誤的地方或還沒有理解更深層的地方,見諒!最后希望幾十年后的自己也能像很多大神一樣回過頭來對(duì)年少時(shí)的自己寫的這些博文做些更深入的分析,在根據(jù)那時(shí)的經(jīng)歷寫出更優(yōu)秀的閱歷與大家分享更深刻的經(jīng)驗(yàn)!鼓勵(lì)自己與大家加油。
(By:Eastmount 2013-8-20 夜1點(diǎn))
參看一些書籍孫景瑞的《從零開始學(xué)C#》、羅剛的《使用C#開發(fā)搜索引擎》、《設(shè)計(jì)模式》課件、同時(shí)參考了CSDN論壇中一篇關(guān)于面向?qū)ο蟮挠懻?#xff0c;個(gè)人認(rèn)為非常不錯(cuò)。http://bbs.csdn.net/topics/220013605
總結(jié)
以上是生活随笔為你收集整理的C# 基础知识 (一).概念与思想篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 网络编程之最简单浏览器实现
- 下一篇: C# 基础知识 (二).独特的知识及用法