English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Herencia de C#

La herencia es una de las concepciones más importantes en la programación orientada a objetos. La herencia permite definir una clase en función de otra clase, lo que facilita la creación y el mantenimiento de aplicaciones. También es beneficioso para la reutilización de código y el ahorro de tiempo de desarrollo.

Cuando se crea una clase, el programador no necesita escribir completamente nuevos miembros de datos y funciones de miembros, solo necesita diseñar una nueva clase que herede los miembros de una clase existente. Esta clase existente se llamaClase base, esta nueva clase se llama派生类.

La idea de herencia se implementa Pertenece a (IS-A) Relación. Por ejemplo, Mamífero Pertenece a (IS-A) Animal, perro Pertenece a (IS-A) Mamífero, por lo que el perro Pertenece a (IS-A) Animal.

Clase base y clase derivada

Una clase puede derivarse de múltiples clases o interfaces, lo que significa que puede heredar datos y funciones de múltiples clases o interfaces.

La sintaxis para crear una clase derivada en C# es la siguiente:

<modificador de acceso> class <clase base>
{
 ...
}
class <clase derivada> : <clase base>
{
 ...
}

Supongamos, hay una clase base Forma, su clase derivada es Rectángulo:

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: Forma
   {
      public int getArea()
      {
         return (width * height);
      }
   }
   
   class RectangleTester
   {
      static void Main(string[] args)
      {
         Rectangle Rect = new Rectangle();

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

         // Imprimir el área del objeto
         Console.WriteLine("Área total: {0}",  Rect.getArea());
         Console.ReadKey();
      }
   }
}

Cuando el código superior se compila y ejecuta, producirá los siguientes resultados:

Área total: 35

Inicialización de la clase base

Las clases derivadas heredan los miembros y métodos de la clase base. Por lo tanto, el objeto de la clase base debe crearse antes del objeto de la clase derivada. Puede inicializar la clase base en la lista de inicialización de miembros.

El siguiente programa demuestra esto:

using System;
espacio de nombres RectangleApplication
{
   clase Rectángulo
   {
      // Variables miembro
      protected double length;
      protected double width;
      public Rectángulo#40;double l, double w)
      {
         length = l;
         width = w;
      }
      public double GetArea#40;)
      {
         devuelve length * width;
      }
      public void Display()
      {
         Console.WriteLine("Largo: {0}", length#41;;
         Console.WriteLine("Ancho: {0}", width#41;;
         Console.WriteLine("Área: {0}", GetArea#40;));
      }
   }//clase final Rectángulo  
   class Tabletop : Rectangle
   {
      private double cost;
      public Tabletop(double l, double w) : base(l, w)
      {125;
      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();
      }
   }
}

Cuando el código superior se compila y ejecuta, producirá los siguientes resultados:

长度: 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();
         // Imprimir el área del objeto
         Console.WriteLine("Área total: {0}",  Rect.getArea());
         Console.WriteLine("Costo total de pintura: ${0}" , Rect.getCost(area));
         Console.ReadKey();
      }
   }
}

Cuando el código superior se compila y ejecuta, producirá los siguientes resultados:

Área total: 35
Costo total de pintura: $2450