• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            ::^喬喬^::明鏡臺::原創(chuàng)空間::C#.NET2.0,C++技術(shù)BLOG
            人最重要的是心境,一顆平靜安穩(wěn)的心才能更好的進(jìn)步,保持自己的心態(tài).成為夢想中的高手QQ群:8664695
            posts - 17,comments - 32,trackbacks - 0
            突然心血來潮寫這篇Blog,因?yàn)樽蛱炷莻€(gè)面試雜錦,其實(shí)面向?qū)ο蠖疾浑y啊,也不難理解。但是很多人覺得很恐怖,所以我就在這里發(fā)表一下,自己對面向?qū)ο蟮睦斫狻O日f下面向?qū)ο螅易钤缃佑|面向?qū)ο笫荍AVA里的,那時(shí)候?qū)W校開了JAVA程序設(shè)計(jì)。因?yàn)樽约涸诟咧芯妥詫W(xué)了C語言啦,所以學(xué)JAVA的時(shí)候沒啥難度。只是在面向?qū)ο蟮臅r(shí)候有一點(diǎn)點(diǎn)卡機(jī)的跡象,為啥?第一,自己一直覺得,繼承和對代碼的復(fù)制粘貼沒啥區(qū)別啊,為什么要弄個(gè)繼承出來。第二,多態(tài),啥叫多態(tài),這個(gè)跟繼承又有什么關(guān)系。。因?yàn)闀镜睦涌梢哉f,打部分都是簡單的,CLASSA繼承與A,然后輸出。。。就這類說明性的代碼,沒錯(cuò)這類代碼是很容易說明繼承的關(guān)系。但是如何令人從理論轉(zhuǎn)化為實(shí)際,有一定的困難。所以真正要感受到這個(gè)還是需要多多的敲下代碼,用心去感受一下,才能理解內(nèi)涵的。第2次接觸面向?qū)ο笫窃诖蠖谝粚W(xué)期,突然心血來潮想學(xué)C++為啥?因?yàn)闊o知- -!為什么說因?yàn)樽约簾o知呢?那時(shí)候我以為,要實(shí)現(xiàn)界面編程只有用C++的MFC去實(shí)現(xiàn),為了學(xué)VC++而開始學(xué)C++。因?yàn)橹坝袀€(gè)JAVA,C語言這類從C語言派生出來的編程語系所以學(xué)C++速度就快上很多。但是也出現(xiàn)了一個(gè)問題,甚至是跟自己學(xué)過的JAVA有很大沖突,C++支持多繼承,私有繼承,等這類繼承。所以一開始有點(diǎn)蒙,而已C++還有一個(gè)析構(gòu)函數(shù)。C/C++被人罵的最多的,就是它的內(nèi)存泄露。什么叫內(nèi)存泄露,我給它的定義是:沒有在適當(dāng)?shù)臅r(shí)候釋放適當(dāng)?shù)膬?nèi)存空間。第三次接觸面向?qū)ο笫荂#大二下學(xué)期。那時(shí)候Net 2.0剛出不是很久。。因?yàn)槲铱催^資料,知道2.0比1.1有跨度更新,所以自己那時(shí)候決定從2.0入手,二放棄1.1,其實(shí)那時(shí)候有學(xué)C#的沖動(dòng)的原因是,JAVA太闊了,而且自己大專出生,JAVA在2006年的時(shí)候簡直就是遍地開花,什么北大清鳥啊,什么達(dá)內(nèi)啊,什么新東方啊,什么巨匠啊等等這類東西(偷偷說句,其實(shí)我蠻鄙視這些培訓(xùn)的,覺得有些東西是需要靠自己去學(xué)的,并不是說在課堂上講下課就可以學(xué)到多少,而且我覺得他們的基礎(chǔ)課程和學(xué)校的沒太大分別。他們一邊打著鄙視高校教育的時(shí)候,一邊做著高校所做的事,所以我覺得比較返感。至于他們的高級課程,我倒是沒有了解,或許有一定的效果,或許而已。。。這個(gè)話題就不說下去了,免得人家拍磚)這個(gè)到和JAVA差別不算太大。我之所以轉(zhuǎn)投C#陣型,其實(shí)是被開源嚇的,為啥?開源太闊了,學(xué)完java基礎(chǔ)學(xué)JSP,學(xué)完JSP學(xué)SSH,學(xué)到這里,才發(fā)現(xiàn)自己已經(jīng)浪費(fèi)了1年多的時(shí)間,還沒有入門,打擊啊。讓后被C#的事件模型吸引,跟著開始C#生涯。開始學(xué)C#我可是老老實(shí)實(shí)從基礎(chǔ)學(xué)起的呢,畢竟那時(shí)候已經(jīng)決定跟著C#混飯吃了,基礎(chǔ)很重要。
            ??????體驗(yàn)繼承的好處的,你需要學(xué)習(xí)多一樣?xùn)|西,那樣?xùn)|西叫多態(tài)。至于多態(tài),等我那天又再心學(xué)來潮再寫。

            C#里的繼承是可以分為3種的(我自己分的),第一種,實(shí)體繼承,第二種虛繼承,第三種接口繼承。有些書籍是這樣分的:實(shí)現(xiàn)繼承,接口繼承。
            實(shí)體繼承:這個(gè)是我們經(jīng)常用的,基類有自己的功能。并允許部分功能被子類掩蓋,也是我們經(jīng)常看到的繼承。

            虛繼承:這個(gè)類是我自己區(qū)別出來的,因?yàn)檫@個(gè)虛繼承是介乎與實(shí)體繼承和接口繼承之間,虛繼承是指基類之生命了方法,但這類方法沒有任何實(shí)體操作,所有實(shí)體操作都必須由子類實(shí)現(xiàn),并且子類都必須事先虛基類的每一個(gè)方法。

            接口繼承:只繼承函數(shù)簽名,沒有繼承任何實(shí)現(xiàn)代碼.

            ?????? 我打個(gè)比喻,實(shí)體繼承可以比喻為一個(gè)國家,虛繼承就是類似歐盟這樣的組織,接口繼承就是聯(lián)合國。國家是有一定職能的,并且他又行駛這些職能的武力支持,這類職能就是實(shí)體繼承的方法。虛繼承,就是你加入了這個(gè)組織,你就必須要遵守這些制度。但是歐盟是沒有實(shí)體的,也就是沒有職能武力支持,它依靠的是實(shí)體子類(加入歐盟的國家)的武力支持。接口繼承,這個(gè)聯(lián)合國比喻最正確不過。就個(gè)名字,什么某些國家掛著它名字出去為非作歹都沒問題。唯一有用的就是他的名字,但是有時(shí)候你又不能少了這個(gè)名字。

            ??????? 在C#里不支持多繼承,這個(gè)不支持多繼承是限制在實(shí)體繼承和虛繼承的基礎(chǔ)上的,根據(jù)設(shè)計(jì)C#那個(gè)牛人的意思,多繼承所產(chǎn)生的代碼污染代價(jià)比繼承來的要大,所以他選擇不支持多繼承,但是需要用到多繼承的情況下,他引入了一個(gè)概念,接口。實(shí)體繼承只能是一個(gè),接口可以是好多個(gè),就好比如,某個(gè)公司只是屬于某個(gè)行業(yè),但是它卻擁有很多個(gè)榮譽(yù)稱號。

            ??????? 上面的分類,只是用來方便我們在什么時(shí)候使用什么樣的繼承。

            理解完繼承的分類,我就開始介紹繼承的組成,

            虛方法:帶有virtual基類函數(shù)(方法)聲明,子類使用override修飾。在C#中的虛函數(shù)(方法)的概念和標(biāo)準(zhǔn)OOP是一致的,可以在子類中重寫虛函數(shù)。在調(diào)用方法時(shí),會調(diào)用對象類型的合適方法。?因?yàn)樵贑#里面默認(rèn)情況下都不是虛擬的,但是JAVA在默認(rèn)情況下是虛擬的。所以必須顯式地聲明為virtual才是虛的(構(gòu)造函數(shù)除外)。關(guān)于虛方法上C#和C++是一致的。但是C#子類重寫時(shí)候需要加上override修飾。

            隱藏方法:當(dāng)沒有把基類的方法聲明為虛方法的時(shí)候,但是派生類又用到了跟基類方法完全相同的名字的方法(不滿足重載的方法),在C#里我們使用關(guān)鍵字new來聲明,則表示我們要隱藏一個(gè)基類的方法。

            當(dāng)我們沒有使用new,也沒有使用virtual-override的時(shí)候,編譯器會隱式地給我們的代碼加上new,并提示一個(gè)警告,所以在編寫穩(wěn)定代碼的時(shí)候,少用默認(rèn)是個(gè)比較好的習(xí)慣,至少我覺得這個(gè)習(xí)慣很好。雖然C#現(xiàn)在沒有夸平臺的概念,但是在C++等其他應(yīng)用的時(shí)候,不一樣的平臺就有不一樣的默認(rèn)方式。當(dāng)然在C++里我們常用宏來解決這個(gè)夸平臺的。跟那個(gè)默認(rèn)值沒有關(guān)系,我只是舉例,舉些不確定100%恰當(dāng),但是又容易幫助人理解的例子。

            ???????例如在我們自己開發(fā)服務(wù)器端控件件的時(shí)候,我們經(jīng)常用到base 關(guān)鍵字的,就是調(diào)用基類方法去操作,主要作用是區(qū)分重新方法和基類方法。

            抽象類;其實(shí)就是我上面說的虛基類。有一個(gè)比較明顯的特征,有關(guān)鍵字abstract因?yàn)槌橄箢惡停橄蠓椒ǘ际菦]有具體代碼的,他們的實(shí)現(xiàn)具體代碼是依靠子類去實(shí)現(xiàn),例如,有一個(gè)基類動(dòng)物,這個(gè)動(dòng)物是虛基類來的,所有動(dòng)物我們都讓它具備了行走的方法,讓后人這個(gè)子類繼承于動(dòng)物,老虎這個(gè)子類也是繼承于動(dòng)物,人這個(gè)子類的行走方式是用2條腿的,老虎是用4條腿,這樣做的好處就是起到抽象限制作用。我又來一個(gè)比如,我給動(dòng)物下一個(gè)定義,你怎么下?最簡單噶,會自己動(dòng)的物體。就叫動(dòng)物。好這樣我就定義好了動(dòng)物是會動(dòng)的,至于怎么動(dòng),是用手動(dòng),還是用腳去動(dòng),還是用身體去動(dòng),沒有沒有細(xì)節(jié)去區(qū)分,只需要知道它動(dòng)了就行,這個(gè)動(dòng)就是抽象。

            接口:接口這個(gè)東西雖然沒限制你繼承多少個(gè)?但是繼承了接口,證明這個(gè)類就會執(zhí)行某些函數(shù)。接口是不能實(shí)現(xiàn)實(shí)體化的,也就是說她沒有溝造函數(shù),接口只是一個(gè)契約,例如你加入某某協(xié)會,協(xié)會的契約是你需要交會費(fèi),同時(shí)我們承認(rèn)你是我們協(xié)會。你可以得到協(xié)會的內(nèi)部資料。例如我們熟悉的Dispose()方法,這個(gè)方法和C++里的析構(gòu)函數(shù)差不多,用于清理的,它實(shí)現(xiàn)了接口IDisposable,如果你有一個(gè)類加入了IDisposable協(xié)會,那么你將得到權(quán)威的Dispose()方法的承認(rèn),具有IDisposable會員的合法資格。你加入了聯(lián)合國,并且依照聯(lián)合國的武力條例,那么你將得到聯(lián)合國授權(quán)你是正義的。

            接口就是給你一個(gè)“借口”可以光明正大地去“侮辱(污染)”人家。(掛著聯(lián)合國名字光明正大的去干澀它國內(nèi)政。)


            繼承的重點(diǎn)就講完了。至于那些訪問規(guī)則就是靠背的,上面那些才是應(yīng)用繼承的細(xì)節(jié)額。體現(xiàn)了如何抽象類,如何使用光明正大的污染代碼等一些使用繼承的模糊信息。我沒有參照任何資料去寫這篇文章的,那么講錯(cuò)了,歡迎大家指出

            posted on 2009-06-06 22:00 ^喬喬^ 閱讀(1647) 評論(2)  編輯 收藏 引用 所屬分類: c++c#

            FeedBack:
            # re: 面向?qū)ο?--繼承
            2009-06-10 10:26 |
            LZ你可知道么,java的東西算是好學(xué)又很少了,C#其實(shí)用到最后比java復(fù)雜,而C++算是編程之最了,一輩子貌似都學(xué)不完的東西。
            然而,我們學(xué)技術(shù)的怎么能因?yàn)闁|西多學(xué)不完就放棄了呢?我相信C#也會在一定的程度上讓你望而卻步的。時(shí)間都是在你換來換去中浪費(fèi)了的,而你也絕對不要在你的周圍做巨人,走出來多看看。
            還有一點(diǎn),北大青鳥這類培訓(xùn)機(jī)構(gòu)的確有資格鄙視高校教育,因?yàn)樗麄兊纳蠙C(jī)課比理論課時(shí)間多很多。但是培訓(xùn)機(jī)構(gòu)都是培養(yǎng)一般人才的地方,養(yǎng)出來的鴿子只能人家喂著活,也就是說是代碼工人。  回復(fù)  更多評論
              
            # re: 面向?qū)ο?--繼承
            2009-06-10 10:57 | 梁喬峰
            java是學(xué)校選給我的,至少06年到現(xiàn)在我也只不斷的深入學(xué)習(xí)C#而已,沒有再換,至于其他語言,只是我了解業(yè)界的一種手法而已。至于說換來換去,其實(shí)可能每個(gè)在校學(xué)生,而又真想學(xué)編程的人都會有這個(gè)想法的,通過不斷了解去選擇一條適合自己的路而已。畢竟學(xué)校跟社會脫節(jié)這個(gè)現(xiàn)實(shí),我也覺得確實(shí)存在,我之所以把我不斷換語言的事情寫出來,是想給跟我有過一樣想法的人給個(gè)經(jīng)歷,所謂條條大道通羅馬。那條路走到底都越來越復(fù)雜。C++其實(shí)我一直在膜拜而已。。個(gè)人真是比較偏好C++的確有比C閃光的地方,有機(jī)會我還真是想轉(zhuǎn)行做C++,至于C#相對來說,我大專畢業(yè),C#找工作更容易,在2008年初C#的人基數(shù)比JAVA的少,但她又的確有流行的趨勢,C++的我這個(gè)學(xué)歷在廣東比較難找,JAVA那時(shí)候已經(jīng)遍地都是。轉(zhuǎn)向C#其實(shí)更大的都是工作上的考慮,或者可以講是以后路的布局,C++其實(shí)我每天都在用,c#我也是每天都在用(上班),跳出去也不容易,工作難找,我也想跟水平比我高的人一起工作,三人行必有我?guī)煛5乾F(xiàn)實(shí)總會令人不容易抉擇  回復(fù)  更多評論
              
            久久久噜噜噜久久熟女AA片| 污污内射久久一区二区欧美日韩| 99久久综合国产精品免费| 久久人人超碰精品CAOPOREN | 久久99精品国产麻豆| 精品一区二区久久| 欧美精品福利视频一区二区三区久久久精品 | 老司机国内精品久久久久| 久久影视综合亚洲| 久久99国产综合精品女同| 久久精品女人天堂AV麻| 久久久久久人妻无码| 色综合久久88色综合天天 | 精品无码久久久久国产| 深夜久久AAAAA级毛片免费看| 久久精品国产清高在天天线| 亚洲国产精品无码久久青草| 久久国产精品久久久| 久久午夜羞羞影院免费观看| 久久精品国产亚洲一区二区三区| 国产精品一久久香蕉国产线看观看 | 国产V综合V亚洲欧美久久| 久久久精品久久久久久| 99久久免费国产特黄| 久久久久国产精品人妻| 亚洲人AV永久一区二区三区久久| 女人香蕉久久**毛片精品| 久久婷婷成人综合色综合| 国产99久久久国产精品小说| 久久精品国产99久久丝袜| 热久久这里只有精品| 久久精品国产亚洲AV电影| 久久久久久久久无码精品亚洲日韩| 亚洲第一永久AV网站久久精品男人的天堂AV| 久久狠狠色狠狠色综合| 久久不射电影网| 久久99精品国产麻豆宅宅| 久久青草国产手机看片福利盒子 | 2021国产精品久久精品| 无码乱码观看精品久久| 亚洲精品高清一二区久久|