深入分析c# 继承

所属分类: 软件编程 / C#教程 阅读数: 67
收藏 0 赞 0 分享

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

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

继承的思想实现了 属于(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#中Datetimepicker出现问题的解决方法

这篇文章主要给大家介绍了关于C#中Datetimepicker出现问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C# SQLite数据库入门使用说明

这篇文章主要给大家介绍了关于C#中SQLite数据库入门使用的相关资料,文中通过图文以及示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C#实现批量下载图片到本地示例代码

这篇文章主要给大家介绍了关于C#如何实现批量下载图片到本地的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c#具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

如何获取C#中方法的执行时间以及其代码注入详解

这篇文章主要给大家介绍了关于如何获取C#中方法的执行时间以及其代码注入的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
收藏 0 赞 0 分享

C#中通过LRU实现通用高效的超时连接探测

这篇文章主要介绍了c#中通过LRU实现通用高效的超时连接探测,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
收藏 0 赞 0 分享

如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

这篇文章主要给大家介绍了关于如何使用C#将Tensorflow训练的.pb文件用在生产环境的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C#程序启动项的设置方法

这篇文章主要为大家详细介绍了C#程序启动项的设置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

c#爬虫爬取京东的商品信息

这篇文章主要给大家介绍了关于利用c#爬虫爬取京东商品信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们随着小编来一起学习学习吧
收藏 0 赞 0 分享

C#随机数生成字母金字塔

这篇文章主要为大家详细介绍了C#随机数生成字母金字塔,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

WPF实现窗体中的悬浮按钮

这篇文章主要为大家详细介绍了WPF实现窗体中的悬浮按钮,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多