深入分析c# 继承

 更新时间:2020年07月18日 17:17:01   作者:菜鸟教程  
这篇文章主要介绍了c# 继承的相关资料,文中讲解的非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。

当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。

继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。

基类和派生类

一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。

C# 中创建派生类的语法如下:

<访问修饰符符> class <基类>
{
 ...
}
class <派生类> : <基类>
{
 ...
}

假设,有一个基类 Shape,它的派生类是 Rectangle:

using System;
namespace InheritanceApplication
{
  class Shape
  {
   public void setWidth(int w)
   {
     width = w;
   }
   public void setHeight(int h)
   {
     height = h;
   }
   protected int width;
   protected int height;
  }

  // 派生类
  class Rectangle: Shape
  {
   public int getArea()
   {
     return (width * height);
   }
  }
  
  class RectangleTester
  {
   static void Main(string[] args)
   {
     Rectangle Rect = new Rectangle();

     Rect.setWidth(5);
     Rect.setHeight(7);

     // 打印对象的面积
     Console.WriteLine("总面积: {0}", Rect.getArea());
     Console.ReadKey();
   }
  }
}

当上面的代码被编译和执行时,它会产生下列结果:

总面积: 35

基类的初始化

派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。

下面的程序演示了这点:

using System;
namespace RectangleApplication
{
  class Rectangle
  {
   // 成员变量
   protected double length;
   protected double width;
   public Rectangle(double l, double w)
   {
     length = l;
     width = w;
   }
   public double GetArea()
   {
     return length * width;
   }
   public void Display()
   {
     Console.WriteLine("长度: {0}", length);
     Console.WriteLine("宽度: {0}", width);
     Console.WriteLine("面积: {0}", GetArea());
   }
  }//end class Rectangle 
  class Tabletop : Rectangle
  {
   private double cost;
   public Tabletop(double l, double w) : base(l, w)
   { }
   public double GetCost()
   {
     double cost;
     cost = GetArea() * 70;
     return cost;
   }
   public void Display()
   {
     base.Display();
     Console.WriteLine("成本: {0}", GetCost());
   }
  }
  class ExecuteRectangle
  {
   static void Main(string[] args)
   {
     Tabletop t = new Tabletop(4.5, 7.5);
     t.Display();
     Console.ReadLine();
   }
  }
}

当上面的代码被编译和执行时,它会产生下列结果:

长度: 4.5
宽度: 7.5
面积: 33.75
成本: 2362.5

C# 多重继承

多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。与单一继承相对,单一继承指一个类别只可以继承自一个父类。

C# 不支持多重继承。但是,您可以使用接口来实现多重继承。下面的程序演示了这点:

using System;
namespace InheritanceApplication
{
  class Shape
  {
   public void setWidth(int w)
   {
     width = w;
   }
   public void setHeight(int h)
   {
     height = h;
   }
   protected int width;
   protected int height;
  }

  // 基类 PaintCost
  public interface PaintCost
  {
   int getCost(int area);

  }
  // 派生类
  class Rectangle : Shape, PaintCost
  {
   public int getArea()
   {
     return (width * height);
   }
   public int getCost(int area)
   {
     return area * 70;
   }
  }
  class RectangleTester
  {
   static void Main(string[] args)
   {
     Rectangle Rect = new Rectangle();
     int area;
     Rect.setWidth(5);
     Rect.setHeight(7);
     area = Rect.getArea();
     // 打印对象的面积
     Console.WriteLine("总面积: {0}", Rect.getArea());
     Console.WriteLine("油漆总成本: ${0}" , Rect.getCost(area));
     Console.ReadKey();
   }
  }
}

当上面的代码被编译和执行时,它会产生下列结果:

总面积: 35
油漆总成本: $2450

以上就是深入分析c# 继承的详细内容,更多关于c# 继承的资料请关注脚本之家其它相关文章!

相关文章

  • C#实现右键快捷菜单(上下文菜单)的两种方式

    C#实现右键快捷菜单(上下文菜单)的两种方式

    在C#中,ContextMenuStrip是一种用于创建右键菜单的控件,它提供了一种方便的方式来为特定的控件或窗体添加自定义的上下文菜单选项,有两种实现方式,文中介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • C# 撒列实现关键字过滤的实例

    C# 撒列实现关键字过滤的实例

    C# 撒列实现关键字过滤的实例,需要的朋友可以参考一下
    2013-04-04
  • c#多线程中Lock()关键字的用法小结

    c#多线程中Lock()关键字的用法小结

    本篇文章主要是对c#多线程中Lock()关键字的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • Unity UGUI Button按钮组件使用示例

    Unity UGUI Button按钮组件使用示例

    这篇文章主要为大家介绍了Unity UGUI Button按钮组件使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • C#实现十字链表的使用示例

    C#实现十字链表的使用示例

    十字链表是一种将数据存储在节点中的数据结构,每个节点包含两个指针,分别指向下一个节点和上一个节点,通过定义节点类和链表类,实现十字链表的创建、遍历、插入和删除等操作,本文就来实现一下
    2023-11-11
  • C#利用itext实现PDF页面处理与切分

    C#利用itext实现PDF页面处理与切分

    这篇文章主要介绍了如何在C#中使用itext做一个pdf的页面大小一致性处理,然后再根据数据切分出需要的pdf,感兴趣的小伙伴可以了解一下
    2022-04-04
  • c# 代理模式

    c# 代理模式

    代理模式:为其他对象提供一种代理以控制其他对象的访问
    2012-10-10
  • c# Task任务的取消方式

    c# Task任务的取消方式

    文章介绍了如何在C#中使用CancellationTokenSource和CancellationToken来取消任务,通过Task.Run方法和CancellationToken参数,可以控制任务的执行,并在需要时取消它们,文章还讨论了CancellationToken参数的重要性
    2024-12-12
  • C#获取日期的星期名称实例代码

    C#获取日期的星期名称实例代码

    本文通过实例代码给大家介绍了基于c#获取日期的星期名称,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-08-08
  • c#获取字符串宽度的示例代码(字节数方法)

    c#获取字符串宽度的示例代码(字节数方法)

    本篇文章主要介绍了c#获取字符串宽度的示例代码(字节数方法)。需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01

最新评论