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

Herança do C#

herança é um dos conceitos mais importantes do design orientado a objetos. Herança permite que definamos uma classe com base em outra classe, tornando mais fácil criar e manter aplicativos. Além disso, também é benéfica para reutilizar código e economizar tempo de desenvolvimento.

Quando se cria uma classe, o programador não precisa reescrever completamente novos membros de dados e funções de membro, basta projetar uma nova classe que herda membros de classes existentes. Esta classe existente é chamada declasse base, esta nova classe é chamada派生类.

a ideia de herança foi implementada pertence a (IS-A) relação. Por exemplo, mamífero pertence a (IS-A) animal, cachorro pertence a (IS-A) mamífero, portanto cachorro pertence a (IS-A) animal.

classe base e classe derivada

Uma classe pode derivar de várias classes ou interfaces, o que significa que ela pode herdar dados e funções de várias classes ou interfaces.

A sintaxe para criar uma classe derivada em C# é a seguinte:

<modificador de acesso> class <base>
{
 ...
}
class <derivada> : <base>
{
 ...
}

Suponha que haja uma classe base Shape, cuja classe derivada é 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);

         // Imprimir a área do objeto
         Console.WriteLine("Área Total: {0}",  Rect.getArea());
         Console.ReadKey();
      }
   }
}

Quando o código acima for compilado e executado, ele produzirá o seguinte resultado:

Área Total: 35

inicialização da classe base

As classes derivadas herdam os membros e métodos da classe base. Portanto, o objeto da classe pai deve ser criado antes do objeto da classe filha. Você pode inicializar a classe pai na lista de inicialização dos membros.

O seguinte programa demonstra isso:

using System;
namespace RectangleApplication
{
   class Rectangle
   {
      // variáveis membro
      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("comprimento: {0}", length);
         Console.WriteLine("largura: {0}", width);
         Console.WriteLine("área: {0}", GetArea());
      }
   }//classe 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();
      }
   }
}

Quando o código acima for compilado e executado, ele produzirá o seguinte resultado:

长度: 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 a área do objeto
         Console.WriteLine("Área Total: {0}",  Rect.getArea());
         Console.WriteLine("Custo Total da Tinta: ${0}" , Rect.getCost(area));
         Console.ReadKey();
      }
   }
}

Quando o código acima for compilado e executado, ele produzirá o seguinte resultado:

Área Total: 35
Custo Total da Tinta: $2450