程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 詳解C#面絕對象編程中的繼續特征

詳解C#面絕對象編程中的繼續特征

編輯:C#入門知識

詳解C#面絕對象編程中的繼續特征。本站提示廣大學習愛好者:(詳解C#面絕對象編程中的繼續特征)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C#面絕對象編程中的繼續特征正文


繼續(加上封裝和多態性)是面向對象的編程的三個重要特征(也稱為“支柱”)之一。 繼續用於創立可重用、擴大和修正在其他類中界說的行動的新類。其成員被繼續的類稱為“基類”,繼續這些成員的類稱為“派生類”。派生類只能有一個直接基類。然則,繼續是可傳遞的。假如 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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved