最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

c#類(lèi),接口,結(jié)構(gòu),抽象類(lèi)介紹 以及抽象和接口的比較

2021-03-10 12:40 作者:老-_-白  | 我要投稿

c#中的類(lèi)是最常見(jiàn)的實(shí)際上就是對(duì)某種類(lèi)型的對(duì)象定義變量和方法的原型。

結(jié)構(gòu)是值類(lèi)型,而類(lèi)是引用類(lèi)型。

1.與類(lèi)不同,結(jié)構(gòu)的實(shí)例化可以不使用 new 運(yùn)算符。結(jié)構(gòu)可以聲明構(gòu)造函數(shù),但它們必須帶參數(shù)。

2.一個(gè)結(jié)構(gòu)不能從另一個(gè)結(jié)構(gòu)或類(lèi)繼承,而且不能作為一個(gè)類(lèi)的基。所有結(jié)構(gòu)都直接繼承自 System.ValueType,后者繼承System.Object。

3.結(jié)構(gòu)可以實(shí)現(xiàn)接口。結(jié)構(gòu)在定義變量時(shí)不能給定初始值。如果要在結(jié)構(gòu)中使用構(gòu)造函數(shù)則必須給所有的變量賦值。

接口是引用類(lèi)型的,類(lèi)似于類(lèi),和抽象類(lèi)的相似之處有三點(diǎn):
????? 1. 不能實(shí)例化;
????? 2. 包含未實(shí)現(xiàn)的方法聲明;
????? 3. 派生類(lèi)必須實(shí)現(xiàn)未實(shí)現(xiàn)的方法,抽象類(lèi)是抽象方法,接口則是所有成員(不僅是方法包括其他成員);
????? 另外,接口有如下特性:
????? 接口除了可以包含方法之外,還可以包含屬性、索引器、事件,而且這些成員都被定義為公有的。除此之外,不能包含任何其他的成員,例如:常量、域、構(gòu)造函數(shù)、析構(gòu)函數(shù)、靜態(tài)成員。一個(gè)類(lèi)可以直接繼承多個(gè)接口,但只能直接繼承一個(gè)類(lèi)(包括抽象類(lèi))。

抽象類(lèi)是特殊的類(lèi),只是不能被實(shí)例化;除此以外,具有類(lèi)的其他特性;重要的是抽象類(lèi)可以包括抽象方法,這是普通類(lèi)所不能的。抽象方法只能聲明于抽象類(lèi)中,且不包含任何實(shí)現(xiàn),派生類(lèi)必須覆蓋它們。另外,抽象類(lèi)可以派生自一個(gè)抽象類(lèi),可以覆蓋基類(lèi)的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類(lèi)必須覆蓋它們。

抽象類(lèi)和接口的區(qū)別:
????? 1. 類(lèi)是對(duì)對(duì)象的抽象,可以把抽象類(lèi)理解為把類(lèi)當(dāng)作對(duì)象,抽象成的類(lèi)叫做抽象類(lèi).而接口只是一個(gè)行為的規(guī)范或規(guī)定,微軟的自定義接口總是后帶able字段,證明其是表述一類(lèi)類(lèi)“我能做。。?!?。抽象類(lèi)更多的是定義在一系列緊密相關(guān)的類(lèi)間,而接口大多數(shù)是關(guān)系疏松但都實(shí)現(xiàn)某一功能的類(lèi)中;
????? 2. 接口基本上不具備繼承的任何具體特點(diǎn),它僅僅承諾了能夠調(diào)用的方法;
????? 3. 一個(gè)類(lèi)一次可以實(shí)現(xiàn)若干個(gè)接口,但是只能擴(kuò)展一個(gè)父類(lèi);
????? 4. 接口可以用于支持回調(diào),而繼承并不具備這個(gè)特點(diǎn);
????? 5. 抽象類(lèi)不能被密封;
????? 6. 抽象類(lèi)實(shí)現(xiàn)的具體方法默認(rèn)為虛的,但實(shí)現(xiàn)接口的類(lèi)中的接口方法卻默認(rèn)為非虛的,當(dāng)然您也可以聲明為虛的;
????? 7.(接口)與非抽象類(lèi)類(lèi)似,抽象類(lèi)也必須為在該類(lèi)的基類(lèi)列表中列出的接口的所有成員提供它自己的實(shí)現(xiàn)。但是,允許抽象類(lèi)將接口方法映射到抽象方法上;
????? 8. 抽象類(lèi)實(shí)現(xiàn)了oop中的一個(gè)原則,把可變的與不可變的分離。抽象類(lèi)和接口就是定義為不可變的,而把可變的座位子類(lèi)去實(shí)現(xiàn);
????? 9. 好的接口定義應(yīng)該是具有專(zhuān)一功能性的,而不是多功能的,否則造成接口污染。如果一個(gè)類(lèi)只是實(shí)現(xiàn)了這個(gè)接口的中一個(gè)功能,而不得不去實(shí)現(xiàn)接口中的其他方法,就叫接口污染;
???? 10. 盡量避免使用繼承來(lái)實(shí)現(xiàn)組建功能,而是使用黑箱復(fù)用,即對(duì)象組合。因?yàn)槔^承的層次增多,造成最直接的后果就是當(dāng)你調(diào)用這個(gè)類(lèi)群中某一類(lèi),就必須把他們?nèi)考虞d到棧中!后果可想而知。(結(jié)合堆棧原理理解)。同時(shí),有心的朋友可以留意到微軟在構(gòu)建一個(gè)類(lèi)時(shí),很多時(shí)候用到了對(duì)象組合的方法。比如 asp.net中,Page類(lèi),有Server Request等屬性,但其實(shí)他們都是某個(gè)類(lèi)的對(duì)象。使用Page類(lèi)的這個(gè)對(duì)象來(lái)調(diào)用另外的類(lèi)的方法和屬性,這個(gè)是非常基本的一個(gè)設(shè)計(jì)原則;
???? 11.如果抽象類(lèi)實(shí)現(xiàn)接口,則可以把接口中方法映射到抽象類(lèi)中作為抽象方法而不必實(shí)現(xiàn),而在抽象類(lèi)的子類(lèi)中實(shí)現(xiàn)接口中方法。

抽象類(lèi)和接口的使用:
????? 1. 如果預(yù)計(jì)要?jiǎng)?chuàng)建組件的多個(gè)版本,則創(chuàng)建抽象類(lèi)。抽象類(lèi)提供簡(jiǎn)單的方法來(lái)控制組件版本;
????? 2.如果創(chuàng)建的功能將在大范圍的全異對(duì)象間使用,則使用接口。如果要設(shè)計(jì)小而簡(jiǎn)練的功能塊,則使用接口;
????? 3.如果要設(shè)計(jì)大的功能單元,則使用抽象類(lèi)。如果要在組件的所有實(shí)現(xiàn)間提供通用的已實(shí)現(xiàn)功能,則使用抽象類(lèi);?
????? 4.抽象類(lèi)主要用于關(guān)系密切的對(duì)象;而接口適合為不相關(guān)的類(lèi)提供通用功能。


c#類(lèi),接口,結(jié)構(gòu),抽象類(lèi)介紹 以及抽象和接口的比較的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
吴江市| 涟水县| 金川县| 雷山县| 玛曲县| 凉山| 察隅县| 武山县| 万荣县| 富阳市| 东乌珠穆沁旗| 龙州县| 长寿区| 石首市| 磴口县| 沙雅县| 新乐市| 北京市| 壤塘县| 崇文区| 华坪县| 武邑县| 丁青县| 南昌市| 博客| 老河口市| 桦甸市| 类乌齐县| 淳化县| 新乡市| 新竹县| 德保县| 锡林郭勒盟| 东港市| 蛟河市| 土默特右旗| 阿鲁科尔沁旗| 张家口市| 东宁县| 南乐县| 贵定县|