C#接口、抽象類、抽象方法和虛方法的區(qū)別是什么,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

創(chuàng)新互聯(lián)公司長(zhǎng)期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為岢嵐企業(yè)提供專業(yè)的成都網(wǎng)站制作、網(wǎng)站建設(shè),岢嵐網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
C#抽象類和接口孩子間在對(duì)于抽象類定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多開發(fā)者在進(jìn)行抽象類定義時(shí)對(duì)于抽象類和接口的選擇顯得比較隨意。其實(shí),兩者之間還是有很大區(qū)別的。
首先說(shuō)一下接口與抽象類的異同:
相同點(diǎn):
1.他們都不能實(shí)例化自己,也就是說(shuō)都是用來(lái)被繼承的。
2.抽象類中的抽象方法和接口方法一樣,都不能有方法體
不同點(diǎn):
1.抽象類里可以有字段,接口中不能有字段.
2.抽象類中的普通方法可以有方法體,而接口方法沒有方法體。
3.接口中的方法不能有訪問(wèn)修飾符,抽象類中的抽象方法被繼承,需要override重寫 .
4.接口更像是一種規(guī)范,一種約束。
5.一個(gè)子類只能繼承一個(gè)抽象類,但卻可以繼承多個(gè)接口。
接下來(lái)是抽象方法和虛方法的異同:
其實(shí)可以把抽象方法看做是沒有方法體的虛方法。
相同點(diǎn):
1.抽象方法和虛方法都可以被重寫。
不同點(diǎn):
1.abstract 和virtual的關(guān)鍵字不同
2.抽象方法一定沒有方法體,而虛方法可以有方法體。
下面寫個(gè)例子說(shuō)明一下:
/// <summary> /// 一個(gè)手機(jī)的抽象類 /// </summary> public abstract class Mobilephone { private string _logo; public string Logo { get { return _logo; } set { _logo = value; } } public abstract void Call(); public virtual void Callagain() { Console.WriteLine("我再打一個(gè)電話"); } } /// <summary> /// 定義一個(gè)實(shí)體類,繼承了一個(gè)抽象類及多個(gè)接口 /// </summary> public class Nokia :Mobilephone,IClock,Ilistenmusic { public override void Call() { Console.WriteLine("NOKIA打電話沒問(wèn)題"); } public void clock() { Console.WriteLine("NOKIA的手機(jī)也有鬧鐘功能"); } public void listenmusic() { Console.WriteLine("NOKIA的手機(jī)還能聽歌"); } public override void Callagain() { Console.WriteLine("算了,還是不打了"); } } /// <summary> /// 下面定義了兩個(gè)接口,為了說(shuō)明可以繼承多個(gè)接口 /// </summary> public interface Ilistenmusic { void listenmusic(); } public interface IClock { void clock(); }在補(bǔ)充一個(gè)小例子,
這里有到很有意思的面試題,說(shuō)名了new關(guān)鍵字和override的區(qū)別:
class Program { static void Main(string[] args) { B5 b5 = new B5(); b5.MethodB(); } } public class A5 { public virtual void MethodA() { Console.WriteLine("A5.MethodA"); Console.Read(); } public virtual void MethodB() { MethodA(); } } public class B5 :A5 { public new void MethodA() { Console.WriteLine("B5.MethodA"); Console.ReadLine(); } } class Program { static void Main(string[] args) { B5 b5 = new B5(); b5.MethodB(); } } public class A5 { public virtual void MethodA() { Console.WriteLine("A5.MethodA"); Console.Read(); } public virtual void MethodB() { MethodA(); } } public class B5 :A5 { public new void MethodA() { Console.WriteLine("B5.MethodA"); Console.ReadLine(); } }最后的答案是:"A5.MethodA"
看完上述內(nèi)容,你們掌握C#接口、抽象類、抽象方法和虛方法的區(qū)別是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
本文名稱:C#接口、抽象類、抽象方法和虛方法的區(qū)別是什么
本文網(wǎng)址:http://chinadenli.net/article16/jhjhdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站收錄、移動(dòng)網(wǎng)站建設(shè)、App設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)