开发手册 欢迎您!
软件开发者资料库

C# - 继承

C#继承 - 从简单和简单的步骤学习C#,从基本到高级概念,包括概述,环境设置,程序结构,基本语法,数据类型,类型转换,变量,常量,运算符,决策,循环,方法,Nullables ,数组,字符串,结构,枚举,文件I / O,类,封装,接口,继承,命名空间,多态性,运算符重载,封装,反射,属性,属性,索引,代理,事件,集合,泛型,匿名方法,不安全代码,预处理器指令,多线程,正则表达式和异常处理。

面向对象编程中最重要的概念之一是继承.继承允许我们根据另一个类定义一个类,这使得创建和维护应用程序变得更容易.这也提供了重用代码功能并加快实现时间的机会.

创建类时,程序员可以指定新的,而不是编写全新的数据成员和成员函数. class应该继承现有类的成员.这个现有的类被称为 base 类,新类被称为派生的类.

继承的想法实现 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;   }   // Derived class   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);         // Print the area of the object.         Console.WriteLine("Total area: {0}",  Rect.getArea());         Console.ReadKey();      }   }}

编译并执行上述代码时,会产生以下结果 :

Total area: 35

初始化基类

派生类继承基类成员变量和成员方法.因此,应在创建子类之前创建超类对象.您可以在成员初始化列表中给出超类初始化的说明.

以下程序演示了这个 :

using System;namespace RectangleApplication {   class Rectangle {            //member variables      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("Length: {0}", length);         Console.WriteLine("Width: {0}", width);         Console.WriteLine("Area: {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("Cost: {0}", GetCost());      }   }   class ExecuteRectangle {      static void Main(string[] args) {         Tabletop t = new Tabletop(4.5, 7.5);         t.Display();         Console.ReadLine();      }   }}

编译并执行上述代码时,会产生以下结果 :

Length: 4.5Width: 7.5Area: 33.75Cost: 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;   }   // Base class PaintCost   public interface PaintCost {      int getCost(int area);   }      // Derived class   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();                  // Print the area of the object.         Console.WriteLine("Total area: {0}",  Rect.getArea());         Console.WriteLine("Total paint cost: ${0}" , Rect.getCost(area));         Console.ReadKey();      }   }}

编译并执行上述代码时,会产生以下结果 :

Total area: 35Total paint cost: $2450