Visual C#之核心语言
生活随笔
收集整理的這篇文章主要介紹了
Visual C#之核心语言
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
期末階段到來了,一方面要準(zhǔn)備著專業(yè)課的考試,一方面計(jì)算機(jī)的進(jìn)度也不能停下來。在寒假到來之前,機(jī)房重構(gòu)是不打算開始了,到時(shí)候做著做著又得停下來,感覺不太好。所以,趁這段時(shí)間,找了基本C#、.NET的書看看,把一些基礎(chǔ)的東西再鞏固鞏固。
這一篇主題為“C#之核心語言”。一共包含三編的內(nèi)容,分別為C#編程介紹、類型和繼承。
在這本書中,知識點(diǎn)結(jié)構(gòu)不是很清晰,但是知識點(diǎn)講解得很詳細(xì),對我們來說,還是比較容易理解的。
第一編 C#編程介紹 這里主要介紹一個(gè)命名空間的概念。 【命名空間】用來組織和重用代碼的編譯單元。之所以出來這樣一個(gè)東西,是因?yàn)槿祟惪捎玫膯卧~數(shù)太少,并且不同的人寫的程序不可能所有的變量都沒有重名現(xiàn)象。為了解決這個(gè)問題,引入了名字空間這個(gè)概念,通過使用 namespace xxx。 我覺得就好比儲藏室,其中包含各類東西,而需要什么,就從中去找。有時(shí)候可能會因?yàn)闁|西一樣而拿錯(cuò),所以就在每個(gè)儲藏室都編個(gè)名,這樣就不會混淆,而是到特定的一個(gè)儲藏室中去取。 第二編 類型 首先明確這里的類型主要包括哪些東西。 在上面的圖中,可能第三級分支大家都很熟悉,而對于第二級分支就感覺陌生不少。以前也沒有這樣歸類過,比如說類、接口這些都沒有想過它們其實(shí)都是屬于引用類型(由類型的實(shí)際值引用(類似于指針)表示的數(shù)據(jù)類型),而數(shù)據(jù)類型、結(jié)構(gòu)則是屬于值類型(一種由類型的實(shí)際值表示的數(shù)據(jù)類型)。大體清楚后,就是細(xì)枝末節(jié)部分的總結(jié)。下面的導(dǎo)圖就是主要知識點(diǎn)。 其實(shí)這部分內(nèi)容之前也是頻頻接觸,但始終沒有專門總結(jié),有疑惑的地方也只是掛著。這一次的學(xué)習(xí),加上書上代碼的演示,有些東西清楚了不少。比如說成員的可訪問性,自己的世界里好像只有public和private。
第三編 繼承 一些類通常會和其它類相關(guān),用于對類進(jìn)行關(guān)聯(lián)的兩種做法是容器和繼承。容器表達(dá)的是一種“有一個(gè)”關(guān)系,一個(gè)類包含或嵌入另一個(gè)類。繼承是基于“是一個(gè)”關(guān)系,一個(gè)類是另一個(gè)類的一種類型。 繼承涉及到一個(gè)基類型和派生類型,其保證了層次結(jié)構(gòu)的清晰性,也促進(jìn)了代碼的重用。 引用類型可以繼承類和接口,而值類型不能繼承其他的值類型或類。 下面是一些概念的比較理解: 【重寫】與【重載】 一個(gè)基類與一個(gè)派生類,當(dāng)一個(gè)基類的一個(gè)成員被重寫時(shí),基成員和派生成員的簽名是相同的。而想要實(shí)現(xiàn)重載,需要不同的簽名。這就是兩者最大的不同。 重寫包含的兩個(gè)關(guān)鍵字: virtual關(guān)鍵字表示一個(gè)成員可以在一個(gè)子類中被重寫。它可以用在方法、屬性、索引器和事件上。在派生類中,override關(guān)鍵字表示要對基類的一個(gè)虛成員進(jìn)行重寫的意圖。 特別地,在C#中,默認(rèn)情況下,函數(shù)不能被重寫。父類必須默認(rèn)方法的重寫,此外,子類必須承認(rèn)它要對方法進(jìn)行重寫的意圖。這就防止子類在不知情的情況下對基類成員進(jìn)行重寫。 其次,當(dāng)一個(gè)成員以不同的簽名被重寫時(shí),在派生類中會產(chǎn)生一個(gè)編譯器警告,這就防止在希望方法重寫的地方意外發(fā)生重載。 【構(gòu)造函數(shù)】與【析構(gòu)函數(shù)】 構(gòu)造函數(shù)是對類進(jìn)行初始化,而析構(gòu)函數(shù)是對類進(jìn)行清理。 共同點(diǎn): 兩者都不能被繼承。所以,基類組件負(fù)責(zé)對基類成員,派生類組件負(fù)責(zé)對派生類成員。 不同點(diǎn): 調(diào)用的順序相反。構(gòu)造函數(shù)是從基類的構(gòu)造函數(shù)自上而下地調(diào)用,而析構(gòu)函數(shù)是被自下而上地調(diào)用,最后派生的組件最先被清理。 下面看實(shí)例,從結(jié)果中可以更加清楚的看到兩者的順序相反。 ? ? ? ? ? ?前者為構(gòu)造函數(shù)調(diào)用,后者為析構(gòu)函數(shù)的調(diào)用。下面是代碼: 構(gòu)造函數(shù)與析構(gòu)函數(shù)的應(yīng)用: public class starter{public static void Main(){XClass obj = new XClass();}}public class ZClass{public ZClass(int param){Console.WriteLine("ZClass constructor");}}public class YClass : ZClass{public YClass(int param): base(YClass.MethodA()){Console.WriteLine("YClass consturctor");}public static int MethodA(){Console.WriteLine("YClass constructor initializer");return 0;}}public class XClass : YClass{public XClass():base(XClass.MethodA()){Console.WriteLine("XClass consturctor");}public static new int MethodA(){Console.WriteLine("XClass constructor initializer");return 0;}}
public class Strater{public static void Main(){XClass obj = new XClass();}}public class ZClass{~ZClass(){Console.WriteLine("ZClass destructor");}}public class YClass : ZClass{~YClass(){Console.WriteLine("YClass desturctor");}}public class XClass : YClass{~XClass(){Console.WriteLine("XClass desturctor");}} 【抽象類】與【接口】 抽象類就是概念。abstract關(guān)鍵字使得一個(gè)類抽象化。抽象類的存在為繼承提供了廣闊的空間,不能為一個(gè)抽象類創(chuàng)建一個(gè)實(shí)例。 一個(gè)接口是一個(gè)協(xié)定,定義了從基類概括出來的必不可少的行為。一個(gè)接口要求制定一個(gè)行為集合,但是并不實(shí)現(xiàn)它。派生類型可以以一個(gè)恰當(dāng)?shù)姆绞阶杂傻貙?shí)現(xiàn)接口。接口必須被繼承,不能為一個(gè)接口創(chuàng)建一個(gè)實(shí)例。 知道了兩者的概念后,就會覺得兩者有相似之處,下面就是對兩者進(jìn)行的一個(gè)簡單的比較: 相同: 一個(gè)接口類類似于一個(gè)抽象類。兩者都要被繼承,都不能被實(shí)例化。 抽象類的成員要求在派生類型中加以實(shí)現(xiàn),接口的成員也要求在派生類型中加以實(shí)現(xiàn)。 不同點(diǎn): 抽象類可以包含一些實(shí)現(xiàn),而接口不能有實(shí)現(xiàn)。 抽象類可以繼承其他類和接口,而接口只能繼承其他接口。 抽象類可以包含字段,而接口沒有狀態(tài)。 抽象類具有構(gòu)造函數(shù)和析構(gòu)函數(shù),而接口沒有。 接口可以被結(jié)構(gòu)繼承,而抽象類不能。 接口可以支持多繼承,而抽象類只能支持單繼承。 一直覺得,接口的概念很難理解,最后,就用生活中的實(shí)例再來說說接口的應(yīng)用: 車的行為包括點(diǎn)火、熄火、加速和減速等。而車又有很多類型,如小汽車、摩托車和公交車等等。它們都擁有車的上述行為,我們就可以用一個(gè)接口來封裝好這些行為。因?yàn)椴煌能噷@些行為的實(shí)現(xiàn)結(jié)果是不一樣的。如:小汽車和摩托車的加速是不一樣的。定義好了這樣一個(gè)接口,就可以讓不同的車自己去實(shí)現(xiàn)自身的一個(gè)和其它車不一樣的行為。 總結(jié): 這一編的學(xué)習(xí)內(nèi)容很基礎(chǔ),在之前的學(xué)習(xí)中也接觸過。但總是感覺有些概念理解得很模糊,借這段復(fù)習(xí)時(shí)間,偶爾抽個(gè)時(shí)間看本書溫習(xí)整理整理,感覺效果還是不錯(cuò)的。加上這一次也有了概念之間的對比和實(shí)例結(jié)果支撐,理解得也更加深刻了些。
總結(jié)
以上是生活随笔為你收集整理的Visual C#之核心语言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS Specificity--CSS
- 下一篇: [leetcode] Pow(x, n)