最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年01月28日 17:19:19   投稿:goldensun  
這篇文章主要介紹了C#面相對象編程中的繼承特性,是C#入門學習中的基礎知識,需要的朋友可以參考下

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

注意
結構不支持繼承,但可以實現(xiàn)接口。

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

2016128171832088.jpeg (449×302)

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

// 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

相關文章

  • C# WebClient類用法實例

    C# WebClient類用法實例

    這篇文章主要介紹了C# WebClient類用法實例,本文講解使用WebClient下載文件、OpenWriter打開一個流使用指定的方法將數(shù)據(jù)寫入到uri以及上傳文件示例,需要的朋友可以參考下
    2015-07-07
  • C#常用知識點簡單回顧(有圖有真相)

    C#常用知識點簡單回顧(有圖有真相)

    C#知識點記錄編程的點點滴滴,本文整理了一些(傳值調用與引用調用/打印三角形/遞歸求階乘/多態(tài)性..等等),感興趣的朋友可以了解下的,不要走開(有圖有真相)
    2013-01-01
  • 基于C#實現(xiàn)設置桌面背景功能

    基于C#實現(xiàn)設置桌面背景功能

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)設置桌面背景功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C# Ado.net實現(xiàn)讀取SQLServer數(shù)據(jù)庫存儲過程列表及參數(shù)信息示例

    C# Ado.net實現(xiàn)讀取SQLServer數(shù)據(jù)庫存儲過程列表及參數(shù)信息示例

    這篇文章主要介紹了C# Ado.net實現(xiàn)讀取SQLServer數(shù)據(jù)庫存儲過程列表及參數(shù)信息,結合實例形式總結分析了C#針對SQLServer數(shù)據(jù)庫存儲過程及參數(shù)信息的各種常見操作技巧,需要的朋友可以參考下
    2019-02-02
  • C#中DataTable 轉換為 Json的方法匯總(三種方法)

    C#中DataTable 轉換為 Json的方法匯總(三種方法)

    JavaScript Object Notation (Json)是一種輕量級的數(shù)據(jù)交換格式,下面小編給大家介紹三種方法實現(xiàn)DataTable轉換成 Json 對象,感興趣的朋友一起看看吧
    2016-11-11
  • C#調用WebService實例與開發(fā)教程(推薦)

    C#調用WebService實例與開發(fā)教程(推薦)

    下面小編就為大家分享一篇C#調用WebService實例與開發(fā)教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨想過來看看吧
    2017-12-12
  • C#實現(xiàn)操作PPT動畫窗格并插入音頻文件

    C#實現(xiàn)操作PPT動畫窗格并插入音頻文件

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)操作PPT動畫窗格并插入音頻文件,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • C#?獲取文件夾里所有文件名的詳細代碼

    C#?獲取文件夾里所有文件名的詳細代碼

    這篇文章主要介紹了C#?獲取文件夾里所有文件名,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 詳解C#如何實現(xiàn)屏幕放大和取色功能

    詳解C#如何實現(xiàn)屏幕放大和取色功能

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)屏幕放大和取色功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • C#事件訂閱發(fā)布實現(xiàn)原理詳解

    C#事件訂閱發(fā)布實現(xiàn)原理詳解

    這篇文章主要介紹了C#事件訂閱發(fā)布實現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12

最新評論

南川市| 平阴县| 浦县| 土默特右旗| 周口市| 客服| 夹江县| 涟水县| 泸西县| 西乌珠穆沁旗| 阜宁县| 韶关市| 太仆寺旗| 益阳市| 乌拉特后旗| 邯郸县| 乌审旗| 茶陵县| 古浪县| 清新县| 岳普湖县| 崇明县| 东海县| 偃师市| 叙永县| 邵阳市| 会同县| 曲麻莱县| 崇阳县| 类乌齐县| 尼玛县| 沂源县| 海安县| 德昌县| 浦城县| 合作市| 海口市| 东宁县| 资兴市| 城步| 五华县|