好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C# 继承

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# 继承的详细内容...

  阅读:37次

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网
[ SiteMap ]