C#抽象类与接口的比较
生活随笔
收集整理的這篇文章主要介紹了
C#抽象类与接口的比较
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
相同點(diǎn)
●都不能被直接實(shí)例化,都可以通過繼承實(shí)現(xiàn)其抽象方法。
●都是面向抽象編程的技術(shù)基礎(chǔ),實(shí)現(xiàn)了諸多的設(shè)計模式。
不同點(diǎn)
●接口支持多繼承;抽象類不能實(shí)現(xiàn)多繼承。
●接口只能定義抽象規(guī)則;抽象類既可以定義規(guī)則,還可能提供已實(shí)現(xiàn)的成員。
●接口是一組行為規(guī)范;抽象類是一個不完全的類,著重族的概念。
●接口可以用于支持回調(diào);抽象類不能實(shí)現(xiàn)回調(diào),因為繼承不支持。
●接口只包含方法、屬性、索引器、事件的簽名,但不能定義字段和包含實(shí)現(xiàn)的方法;抽象類可以定義字段、屬性、包含有實(shí)現(xiàn)的方法。??
●接口可以作用于值類型和引用類型;抽象類只能作用于引用類型。例如,Struct就可以繼承接口,而不能繼承類。
?? 通過相同與不同的比較,我們只能說接口和抽象類,各有所長,但無優(yōu)略。在實(shí)際的編程實(shí)踐中,我們要視具體情況來酌情量才,但是以下的經(jīng)驗和積累,或許能給大家一些啟示,除了我的一些積累之外,很多都來源于經(jīng)典,我相信經(jīng)得起考驗。所以在規(guī)則與場合中,我們學(xué)習(xí)這些經(jīng)典,最重要的是學(xué)以致用,當(dāng)然我將以一家之言博大家之笑,看官請繼續(xù)。
規(guī)則與場合
1.請記住,面向?qū)ο笏枷氲囊粋€最重要的原則就是:面向接口編程。 軟件開發(fā)網(wǎng) www.mscto.com
2.借助接口和抽象類,23個設(shè)計模式中的很多思想被巧妙的實(shí)現(xiàn)了,我認(rèn)為其精髓簡單說來就是:面向抽象編程。
3.抽象類應(yīng)主要用于關(guān)系密切的對象,而接口最適合為不相關(guān)的類提供通用功能。
4.接口著重于CAN-DO關(guān)系類型,而抽象類則偏重于IS-A式的關(guān)系;
5.接口多定義對象的行為;抽象類多定義對象的屬性;??
6.接口定義可以使用public、protected、internal 和private修飾符,但是幾乎所有的接口都定義為public,原因就不必多說了。
7.“接口不變”,是應(yīng)該考慮的重要因素。所以,在由接口增加擴(kuò)展時,應(yīng)該增加新的接口,而不能更改現(xiàn)有接口。
8.盡量將接口設(shè)計成功能單一的功能塊,以.NET Framework為例,IDisposable、IDisposable、IComparable、IEquatable、IEnumerable等都只包含一個公共方法。
9.接口名稱前面的大寫字母“I”是一個約定,正如字段名以下劃線開頭一樣,請堅持這些原則。
10.在接口中,所有的方法都默認(rèn)為public。??
11.如果預(yù)計會出現(xiàn)版本問題,可以創(chuàng)建“抽象類”。例如,創(chuàng)建了狗(Dog)、雞(Chicken)和鴨(Duck),那么應(yīng)該考慮抽象出動物(Animal)來應(yīng)對以后可能出現(xiàn)風(fēng)馬牛的事情。而向接口中添加新成員則會強(qiáng)制要求修改所有派生類,并重新編譯,所以版本式的問題最好以抽象類來實(shí)現(xiàn)。
12.從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實(shí)實(shí)現(xiàn)。
13.對抽象類不能使用new關(guān)鍵字,也不能被密封,原因是抽象類不能被實(shí)例化。
14.在抽象方法聲明中不能使用 static 或 virtual 修飾符。
轉(zhuǎn)載于:https://www.cnblogs.com/and/archive/2008/11/16/1334440.html
總結(jié)
以上是生活随笔為你收集整理的C#抽象类与接口的比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 棍子节快乐~ 顺便转一篇weka源码分析
- 下一篇: VS-c# web程序:gridview