日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談接口、抽象類、抽象方法和虛方法的區(qū)別

C#抽象類接口孩子間在對于抽象類定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多開發(fā)者在進行抽象類定義時對于抽象類和接口的選擇顯得比較隨意。其實,兩者之間還是有很大區(qū)別的。

首先說一下接口與抽象類的異同:

相同點:

1.他們都不能實例化自己,也就是說都是用來被繼承的。

2.抽象類中的抽象方法和接口方法一樣,都不能有方法體

不同點:

1.抽象類里可以有字段,接口中不能有字段.

2.抽象類中的普通方法可以有方法體,而接口方法沒有方法體。

3.接口中的方法不能有訪問修飾符,抽象類中的抽象方法被繼承,需要override重寫 .

4.接口更像是一種規(guī)范,一種約束。

5.一個子類只能繼承一個抽象類,但卻可以繼承多個接口。

接下來是抽象方法和虛方法的異同:

其實可以把抽象方法看做是沒有方法體的虛方法。

相同點:

1.抽象方法和虛方法都可以被重寫。

不同點

1.abstract 和virtual的關鍵字不同

2.抽象方法一定沒有方法體,而虛方法可以有方法體。

下面寫個例子說明一下:

 
 
 
  1. /// 
  2. /// 一個手機的抽象類
  3. /// 
  4. public abstract class Mobilephone 
  5. {
  6. private string _logo;
  7. public string Logo
  8. {
  9. get { return _logo; }
  10. set { _logo = value; }
  11. }
  12. public abstract void Call();
  13. public virtual void Callagain() 
  14. {
  15. Console.WriteLine("我再打一個電話");
  16. }
  17. }
  18. /// 
  19. /// 定義一個實體類,繼承了一個抽象類及多個接口
  20. /// 
  21. public class Nokia :Mobilephone,IClock,Ilistenmusic
  22. {
  23. public override void Call()
  24. {
  25. Console.WriteLine("NOKIA打電話沒問題");
  26. }
  27. public void clock()
  28. {
  29. Console.WriteLine("NOKIA的手機也有鬧鐘功能");
  30. }
  31. public void listenmusic()
  32. {
  33. Console.WriteLine("NOKIA的手機還能聽歌");
  34. }
  35. public override void Callagain() 
  36. {
  37. Console.WriteLine("算了,還是不打了");
  38. }
  39. }
  40. /// 
  41. /// 下面定義了兩個接口,為了說明可以繼承多個接口
  42. /// 
  43. public interface Ilistenmusic 
  44. {
  45. void listenmusic();
  46. }
  47. public interface IClock 
  48. {
  49. void clock();

在補充一個小例子,

這里有到很有意思的面試題,說名了new關鍵字和override的區(qū)別:

 
 
 
  1. class Program 
  2. static void Main(string[] args) 
  3. B5 b5 = new B5(); 
  4. b5.MethodB(); 
  5. public class A5 
  6. public virtual void MethodA() 
  7. Console.WriteLine("A5.MethodA"); 
  8. Console.Read(); 
  9. public virtual void MethodB() 
  10. MethodA(); 
  11. public class B5 :A5 
  12. public new void MethodA() 
  13. Console.WriteLine("B5.MethodA"); 
  14. Console.ReadLine(); 
  15. class Program
  16. {
  17. static void Main(string[] args)
  18. {
  19. B5 b5 = new B5();
  20. b5.MethodB();
  21. }
  22. }
  23. public class A5
  24. {
  25. public virtual void MethodA()
  26. {
  27. Console.WriteLine("A5.MethodA");
  28. Console.Read();
  29. }
  30. public virtual void MethodB()
  31. {
  32. MethodA();
  33. }
  34. }
  35. public class B5 :A5
  36. {
  37. public new void MethodA() 
  38. {
  39. Console.WriteLine("B5.MethodA");
  40. Console.ReadLine();
  41. }

***的答案是:"A5.MethodA"


當前標題:淺談接口、抽象類、抽象方法和虛方法的區(qū)別
分享URL:http://www.5511xx.com/article/dhepies.html