成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#接口和抽象類的經典示例與比對

開發 后端
學習C#接口和抽象類最好的方法莫過于研究范例。.NET框架是最好的學習資源,另外本文也提供了幾個實例。

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

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

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

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

C#接口和抽象類Animal示例

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

設計結構如圖所示:

設計結構圖

1. 定義抽象類

  1. public abstract class Animal   
  2. {   
  3. protected string _name;   
  4. //聲明抽象屬性   
  5. public abstract string Name   
  6. {   
  7. get;   
  8. }   
  9.  
  10. //聲明抽象方法   
  11.  
  12. public abstract void Show();   
  13.  
  14. //實現一般方法   
  15.  
  16. public void MakeVoice()   
  17. {   
  18. Console.WriteLine("All animals can make voice!");   
  19. }   
  20. }   
  21.  
  22.    

2. 定義接口

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

3. 實現抽象類和接口

  1. public class Duck : Animal, IAction   
  2. {   
  3. public Duck(string name)   
  4. {   
  5. _name = name;   
  6. }   
  7. //重載抽象方法   
  8.  
  9. public override void Show()   
  10. {   
  11. Console.WriteLine(_name + " is showing for you.");   
  12. }   
  13.  
  14. //重載抽象屬性   
  15.  
  16. public override string Name   
  17. {   
  18. get { return _name;}   
  19. }   
  20.  
  21. //實現接口方法   
  22.  
  23. public void Move()   
  24. {   
  25. Console.WriteLine("Duck also can swim.");   
  26. }   
  27. }   
  28.  
  29. public class Dog : Animal, IAction   
  30. {   
  31. public Dog(string name)   
  32. {   
  33. _name = name;   
  34. }   
  35. public override void Show()   
  36. {   
  37. Console.WriteLine(_name + " is showing for you.");   
  38. }   
  39.  
  40. public override string Name   
  41. {   
  42. get { return _name; }   
  43.  
  44. }   
  45.  
  46. public void Move()   
  47. {   
  48. Console.WriteLine(_name + " also can run.");   
  49. }   
  50. }   
  51.  

4. 客戶端實現

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

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

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

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

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

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

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

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

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

【編輯推薦】

  1. 什么是.NET接口?什么是.NET抽象類?
  2. C#接口定義學習經驗
  3. 概述C# COM接口相關知識
  4. 淺談C#抽象類和C#接口
  5. C# ICloneable接口應用淺析
責任編輯:yangsai 來源: 網絡轉載
相關推薦

2009-08-10 10:04:25

C#抽象類C#接口

2009-07-30 18:36:00

C#接口C#抽象類

2011-07-06 10:33:31

C#

2011-07-12 15:58:48

java抽象類接口

2009-08-03 18:12:31

C#抽象類

2009-09-04 13:31:33

C#抽象類

2012-02-29 09:32:01

Java

2011-06-28 10:55:20

C#接口抽象類

2009-04-30 15:15:01

Java抽象類接口

2010-03-04 09:40:04

Java接口抽象類

2011-05-19 18:01:56

JAVA

2009-06-14 21:31:29

Java抽象類Java接口

2009-06-16 11:30:00

Java抽象類Java接口

2011-12-22 10:48:21

Java

2015-03-23 09:33:43

Java抽象類Java接口Java

2011-07-10 14:07:59

JAVA

2021-12-23 07:11:31

開發

2009-11-23 20:00:25

PHP5接口PHP5抽象類

2020-10-19 13:03:16

Java 8接口抽象類

2009-08-14 15:42:11

什么是.NET接口.NET抽象類
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 2019精品手机国产品在线 | 欧美久久久久久久久中文字幕 | 色欧美片视频在线观看 | 欧美日韩一区精品 | 最新黄色在线观看 | 久久精品国产一区二区三区不卡 | 日韩av在线免费 | 自拍偷拍中文字幕 | www.日韩系列| 国产资源一区二区三区 | 亚洲精品福利视频 | 色资源在线 | 一二三区视频 | 国产一区二区三区在线看 | 久久99精品久久久久久琪琪 | 精品美女在线观看视频在线观看 | 久久婷婷国产香蕉 | 在线日韩欧美 | 日韩在线视频一区二区三区 | a视频在线 | 日韩午夜影院 | 欧美激情视频一区二区三区在线播放 | 黄色一级免费看 | 黄色大片在线免费观看 | 午夜私人影院在线观看 | 狠狠干美女| 亚洲精品乱码久久久久久按摩观 | 成人毛片一区二区三区 | 999热视频| 欧美综合一区 | 久久久久久久久中文字幕 | 欧美a在线看 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 九九热这里| 日韩精品一区二区三区在线播放 | 亚洲高清一区二区三区 | 视频三区 | 国产在线视频一区 | 日日操夜夜操天天操 | 性做久久久久久免费观看欧美 | 成人国产精品久久久 |