C#接口、抽象類、抽象方法和虛方法的區別是什么,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
創新互聯公司長期為上千家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為岢嵐企業提供專業的成都網站制作、網站建設,岢嵐網站改版等技術服務。擁有十多年豐富建站經驗和眾多成功案例,為您定制開發。
C#抽象類和接口孩子間在對于抽象類定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多開發者在進行抽象類定義時對于抽象類和接口的選擇顯得比較隨意。其實,兩者之間還是有很大區別的。
首先說一下接口與抽象類的異同:
相同點:
1.他們都不能實例化自己,也就是說都是用來被繼承的。
2.抽象類中的抽象方法和接口方法一樣,都不能有方法體
不同點:
1.抽象類里可以有字段,接口中不能有字段.
2.抽象類中的普通方法可以有方法體,而接口方法沒有方法體。
3.接口中的方法不能有訪問修飾符,抽象類中的抽象方法被繼承,需要override重寫 .
4.接口更像是一種規范,一種約束。
5.一個子類只能繼承一個抽象類,但卻可以繼承多個接口。
接下來是抽象方法和虛方法的異同:
其實可以把抽象方法看做是沒有方法體的虛方法。
相同點:
1.抽象方法和虛方法都可以被重寫。
不同點:
1.abstract 和virtual的關鍵字不同
2.抽象方法一定沒有方法體,而虛方法可以有方法體。
下面寫個例子說明一下:
/// <summary> /// 一個手機的抽象類 /// </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("我再打一個電話"); } } /// <summary> /// 定義一個實體類,繼承了一個抽象類及多個接口 /// </summary> public class Nokia :Mobilephone,IClock,Ilistenmusic { public override void Call() { Console.WriteLine("NOKIA打電話沒問題"); } public void clock() { Console.WriteLine("NOKIA的手機也有鬧鐘功能"); } public void listenmusic() { Console.WriteLine("NOKIA的手機還能聽歌"); } public override void Callagain() { Console.WriteLine("算了,還是不打了"); } } /// <summary> /// 下面定義了兩個接口,為了說明可以繼承多個接口 /// </summary> public interface Ilistenmusic { void listenmusic(); } public interface IClock { void clock(); }
在補充一個小例子,
這里有到很有意思的面試題,說名了new關鍵字和override的區別:
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"
看完上述內容,你們掌握C#接口、抽象類、抽象方法和虛方法的區別是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!
本文名稱:C#接口、抽象類、抽象方法和虛方法的區別是什么
本文網址:http://vcdvsql.cn/article16/jhjhdg.html
成都網站建設公司_創新互聯,為您提供虛擬主機、網站收錄、移動網站建設、App設計、網站設計公司、響應式網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯