日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
C#接口和抽象類的經典示例與比對

C#接口和抽象類絕對經典示例

.NET Framework是學習的最好資源,有意識的研究FCL是每個.NET程序員的必修課,關于接口和抽象類在FCL中的使用,我有以下的建議:

FCL對集合類使用了基于接口的設計,所以請關注System.Collections中關于接口的設計實現(xiàn);

FCL對數(shù)據(jù)流相關類使用了基于抽象類的設計,所以請關注System.IO.Stream類的抽象類設計機制。

C#接口和抽象類Animal示例

下面的實例,因為是我的理解,因此給經典打上“相對”的記號,至于什么時候晉升為“絕對”,就看我在.NET追求的路上,是否能夠一如既往的如此執(zhí)著,因此我將把相對重構到絕對為止(呵呵)。 本示例沒有闡述抽象類和接口在設計模式中的應用,因為那將是另一篇有討論價值的文本,本文著眼與概念和原則的把握,但是真正的應用來自于具體的需求規(guī)范。

設計結構如圖所示:

1. 定義抽象類

 
 
 
 
  1. public abstract class Animal 
  2. protected string _name; 
  3. //聲明抽象屬性 
  4. public abstract string Name 
  5. get
  6. //聲明抽象方法 
  7. public abstract void Show(); 
  8. //實現(xiàn)一般方法 
  9. public void MakeVoice() 
  10. Console.WriteLine("All animals can make voice!"); 
  11.  

2. 定義接口

 
 
 
 
  1. public interface IAction 
  2. //定義公共方法標簽 
  3. void Move(); 

3. 實現(xiàn)抽象類和接口

 
 
 
 
  1. public class Duck : Animal, IAction 
  2. public Duck(string name) 
  3. _name = name; 
  4. //重載抽象方法 
  5. public override void Show() 
  6. Console.WriteLine(_name + " is showing for you."); 
  7. //重載抽象屬性 
  8. public override string Name 
  9. get { return _name;} 
  10. //實現(xiàn)接口方法 
  11. public void Move() 
  12. Console.WriteLine("Duck also can swim."); 
  13. public class Dog : Animal, IAction 
  14. public Dog(string name) 
  15. _name = name; 
  16. public override void Show() 
  17. Console.WriteLine(_name + " is showing for you."); 
  18. public override string Name 
  19. get { return _name; } 
  20. public void Move() 
  21. Console.WriteLine(_name + " also can run."); 

4. 客戶端實現(xiàn)

 
 
 
 
  1. public class TestAnmial 
  2. public static void Main(string [] args) 
  3. Animal duck = new Duck("Duck"); 
  4. duck.MakeVoice(); 
  5. duck.Show(); 
  6. Animal dog = new Dog("Dog"); 
  7. dog.MakeVoice(); 
  8. dog.Show(); 
  9. IAction dogAction = new Dog("A big dog"); 
  10. dogAction.Move(); 

dunai認為:抽象類是提取具體類的公因式,而接口是為了將一些不相關的類“雜湊”成一個共同的群體。至于他們在各個語言中的句法,語言細節(jié)并不是我關心的重點。

Artech認為:所代碼共用和可擴展性考慮,盡量使用Abstract Class。當然接口在其他方面的優(yōu)勢,我認為也不可忽視。

shenfx認為:當在差異較大的對象間尋求功能上的共性時,使用接口;當在共性較多的對象間尋求功能上的差異時,使用抽象基類。

最后,有關C#接口和抽象類的學習,MSDN的建議:

如果預計要創(chuàng)建組件的多個版本,則創(chuàng)建抽象類。抽象類提供簡單易行的方法來控制組件版本。通過更新基類,所有繼承類都隨更改自動更新。另一方面,接口一旦創(chuàng)建就不能更改。如果需要接口的新版本,必須創(chuàng)建一個全新的接口。

如果創(chuàng)建的功能將在大范圍的全異對象間使用,則使用接口。抽象類應主要用于關系密切的對象,而接口最適合為不相關的類提供通用功能。

如果要設計小而簡練的功能塊,則使用接口。如果要設計大的功能單元,則使用抽象類。

如果要在組件的所有實現(xiàn)間提供通用的已實現(xiàn)功能,則使用抽象類。抽象類允許部分實現(xiàn)類,而接口不包含任何成員的實現(xiàn)。


當前文章:C#接口和抽象類的經典示例與比對
本文地址:http://www.dlmjj.cn/article/ccespcg.html