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

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

新聞中心

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

C#接口和抽象類絕對經(jīng)典示例

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

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

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

C#接口和抽象類Animal示例

下面的實(shí)例,因?yàn)槭俏业睦斫猓虼私o經(jīng)典打上“相對”的記號,至于什么時候晉升為“絕對”,就看我在.NET追求的路上,是否能夠一如既往的如此執(zhí)著,因此我將把相對重構(gòu)到絕對為止(呵呵)。 本示例沒有闡述抽象類和接口在設(shè)計(jì)模式中的應(yīng)用,因?yàn)槟菍⑹橇硪黄杏懻搩r值的文本,本文著眼與概念和原則的把握,但是真正的應(yīng)用來自于具體的需求規(guī)范。

設(shè)計(jì)結(jié)構(gòu)如圖所示:

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. //實(shí)現(xiàn)一般方法 
  9. public void MakeVoice() 
  10. Console.WriteLine("All animals can make voice!"); 
  11.  

2. 定義接口

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

3. 實(shí)現(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. //實(shí)現(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. 客戶端實(shí)現(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認(rèn)為:抽象類是提取具體類的公因式,而接口是為了將一些不相關(guān)的類“雜湊”成一個共同的群體。至于他們在各個語言中的句法,語言細(xì)節(jié)并不是我關(guān)心的重點(diǎn)。

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

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

最后,有關(guān)C#接口和抽象類的學(xué)習(xí),MSDN的建議:

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

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

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

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


本文標(biāo)題:C#接口和抽象類的經(jīng)典示例與比對
文章分享:http://www.5511xx.com/article/ccespcg.html