详解C#面相对象编程中的继承特性

 更新时间:2016年01月28日 17:19:19   投稿:goldensun  
这篇文章主要介绍了C#面相对象编程中的继承特性,是C#入门学习中的基础知识,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

继承(加上封装和多态性)是面向对象的编程的三个主要特性(也称为“支柱”)之一。 继承用于创建可重用、扩展和修改在其他类中定义的行为的新类。其成员被继承的类称为“基类”,继承这些成员的类称为“派生类”。派生类只能有一个直接基类。但是,继承是可传递的。如果 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

相关文章

  • C#使用round函数四舍五入的方法

    C#使用round函数四舍五入的方法

    这篇文章主要介绍了C#使用round函数四舍五入的方法,实例分析了C#中round函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • C#使用StreamWriter写入文件的方法

    C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下
    2015-05-05
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法

    C#使用WebClient登录网站并抓取登录后的网页信息实现方法

    这篇文章主要介绍了C#使用WebClient登录网站并抓取登录后的网页信息实现方法,涉及C#基于会话操作登陆网页及页面读取相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • C#实现给图片添加日期信息的示例详解

    C#实现给图片添加日期信息的示例详解

    这篇文章主要为大家详细介绍了如何利用C#实现给图片添加日期信息,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • 利用WPF窗口程序设计简单计算器

    利用WPF窗口程序设计简单计算器

    这篇文章主要为大家详细介绍了利用WPF窗口程序设计简单计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C#桥接模式完整实例

    C#桥接模式完整实例

    这篇文章主要介绍了C#桥接模式,以实例形式较为详细的分析了C#桥接模式的实现原理与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 详解DataGridView控件的数据绑定

    详解DataGridView控件的数据绑定

    本文详细讲解了DataGridView控件的数据绑定,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • C#判断三角形的类型

    C#判断三角形的类型

    这篇文章主要介绍了C#判断三角形的类型的方法,通过输入三角形的三条边长,判断是否能构成一个三角形,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • C#向Word文档中添加内容控件的方法示例

    C#向Word文档中添加内容控件的方法示例

    这篇文章主要给大家介绍了C#向Word文档中添加内容控件的方法,文中对各种不同控件的添加方法分别进行了介绍,如组合框、文本、图片、日期选取器及下拉列表等内容控件,都给出了详细的示例代码,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • C# Winform 禁止用户调整ListView的列宽

    C# Winform 禁止用户调整ListView的列宽

    在使用 ListView 的时候, 有时我们不想让别人随意调整列宽, 或者某几列的列宽, 以便达到美观, 或者隐藏数据的作用. 那么可以用一下代码来实现
    2011-05-05

最新评论

?


http://www.vxiaotou.com