国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

詳解C#面相對象編程中的繼承特性

2020-01-24 01:18:49
字體:
來源:轉載
供稿:網友

繼承(加上封裝和多態性)是面向對象的編程的三個主要特性(也稱為“支柱”)之一。 繼承用于創建可重用、擴展和修改在其他類中定義的行為的新類。其成員被繼承的類稱為“基類”,繼承這些成員的類稱為“派生類”。派生類只能有一個直接基類。但是,繼承是可傳遞的。如果 ClassB 派生出 ClassC,ClassA 派生出 ClassB,則 ClassC 會繼承 ClassB 和 ClassA 中聲明的成員。

注意
結構不支持繼承,但可以實現接口。

從概念上來說,派生類是基類的特例。 例如,如果您有一個基類 Animal,則可以有一個名為 Mammal 的派生類和一個名為 Reptile 的派生類。 Mammal 是一個 Animal,Reptile 也是一個 Animal,但每個派生類均表示基類的不同專用化。
定義一個類從其他類派生時,派生類隱式獲得基類的除構造函數和析構函數以外的所有成員。因此,派生類可以重用基類中的代碼而無需重新實現這些代碼。可以在派生類中添加更多成員。派生類以這種方式擴展基類的功能。
下圖演示一個 WorkItem 類,該類表示某業務流程中的一個工作項。和所有的類一樣,該類派生自 System.Object 并繼承其所有方法。 WorkItem 添加了自己的五個成員。其中包括一個構造函數,因為構造函數不能繼承。類ChangeRequest 繼承自 WorkItem 并表示特定種類的工作項。 ChangeRequest 在它從 WorkItem 和 Object 繼承的成員中另外添加了兩個成員。它必須添加其自己的構造函數,還添加 originalItemID。利用屬性 originalItemID,可將 ChangeRequest 實例與更改請求將應用到的原始 WorkItem 相關聯。

2016128171832088.jpeg (449×302)

類繼承
下面的示例演示如何以 C# 表示上圖所示的類關系。該示例還演示 WorkItem 如何重寫虛方法 Object.ToString,以及 ChangeRequest 類如何繼承該方法的 WorkItem 實現。

// WorkItem implicitly inherits from the Object class.public class WorkItem{  // Static field currentID stores the job ID of the last WorkItem that  // has been created.  private static int currentID;  //Properties.  protected int ID { get; set; }  protected string Title { get; set; }  protected string Description { get; set; }  protected TimeSpan jobLength { get; set; }  // Default constructor. If a derived class does not invoke a base-  // class constructor explicitly, the default constructor is called  // implicitly.   public WorkItem()  {    ID = 0;    Title = "Default title";    Description = "Default description.";    jobLength = new TimeSpan();  }  // Instance constructor that has three parameters.  public WorkItem(string title, string desc, TimeSpan joblen)  {    this.ID = GetNextID();    this.Title = title;    this.Description = desc;    this.jobLength = joblen;  }  // Static constructor to initialize the static member, currentID. This  // constructor is called one time, automatically, before any instance  // of WorkItem or ChangeRequest is created, or currentID is referenced.  static WorkItem()  {    currentID = 0;  }  protected int GetNextID()  {    // currentID is a static field. It is incremented each time a new    // instance of WorkItem is created.    return ++currentID;  }  // Method Update enables you to update the title and job length of an  // existing WorkItem object.  public void Update(string title, TimeSpan joblen)  {    this.Title = title;    this.jobLength = joblen;  }  // Virtual method override of the ToString method that is inherited  // from System.Object.  public override string ToString()  {    return String.Format("{0} - {1}", this.ID, this.Title);  }}// ChangeRequest derives from WorkItem and adds a property (originalItemID) // and two constructors.public class ChangeRequest : WorkItem{  protected int originalItemID { get; set; }  // Constructors. Because neither constructor calls a base-class   // constructor explicitly, the default constructor in the base class  // is called implicitly. The base class must contain a default   // constructor.  // Default constructor for the derived class.  public ChangeRequest() { }  // Instance constructor that has four parameters.  public ChangeRequest(string title, string desc, TimeSpan jobLen,             int originalID)  {    // The following properties and the GetNexID method are inherited     // from WorkItem.    this.ID = GetNextID();    this.Title = title;    this.Description = desc;    this.jobLength = jobLen;    // Property originalItemId is a member of ChangeRequest, but not     // of WorkItem.    this.originalItemID = originalID;  }}class Program{  static void Main()  {    // Create an instance of WorkItem by using the constructor in the     // base class that takes three arguments.    WorkItem item = new WorkItem("Fix Bugs",                   "Fix all bugs in my code branch",                   new TimeSpan(3, 4, 0, 0));    // Create an instance of ChangeRequest by using the constructor in    // the derived class that takes four arguments.    ChangeRequest change = new ChangeRequest("Change Base Class Design",                         "Add members to the class",                         new TimeSpan(4, 0, 0),                         1);    // Use the ToString method defined in WorkItem.    Console.WriteLine(item.ToString());    // Use the inherited Update method to change the title of the     // ChangeRequest object.    change.Update("Change the Design of the Base Class",      new TimeSpan(4, 0, 0));    // ChangeRequest inherits WorkItem's override of ToString.    Console.WriteLine(change.ToString());    // Keep the console open in debug mode.    Console.WriteLine("Press any key to exit.");    Console.ReadKey();  }}

輸出:

  1 - Fix Bugs  2 - Change the Design of the Base Class

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桂东县| 瑞昌市| 鄂托克旗| 辰溪县| 龙口市| 达日县| 秭归县| 临泉县| 应城市| 本溪市| 盱眙县| 元阳县| 广宗县| 芦溪县| 云浮市| 民乐县| 庆阳市| 上林县| 德格县| 高邮市| 临江市| 鹿泉市| 阳高县| 璧山县| 宣化县| 稷山县| 竹溪县| 林周县| 长阳| 成安县| 吉安市| 海门市| 小金县| 柳林县| 房产| 客服| 永州市| 郧西县| 拉萨市| 宁武县| 瓦房店市|