Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Herencia de C#

Herencia de C#

En este tutorial, aprenderemos sobre la herencia de C# y sus tipos con la ayuda de ejemplos.

En C#, la herencia nos permite crear una nueva clase a partir de una clase existente. Es una característica clave de la Programación Orientada a Objetos (POO).

La clase a partir de la cual se crea una nueva clase se conoce como clase base (padre o superclase). Y, la nueva clase se llama clase derivada (hija o subclase)

La clase derivada hereda los campos y métodos de la clase base. Esto ayuda con la reutilización del código en C#.


¿Cómo realizar la herencia en C#?

En C#, usamos el : símbolo para realizar la herencia. Por ejemplo,

class Animal {  
  // fields and methods
} 

// Dog inherits from Animal
class Dog : Animal {
  // fields and methods of Animal 
  // fields and methods of Dog 
}

Aquí, heredamos la clase derivada Dog de la clase base Animal . El Perro La clase ahora puede acceder a los campos y métodos de Animal clase.


Ejemplo:herencia de C#

using System;

namespace Inheritance {

  // base class
  class Animal { 

    public string name;

    public void display() {
      Console.WriteLine("I am an animal");
    }
    
  } 
  
  // derived class of Animal 
  class Dog : Animal {
    
    public void getName() {
      Console.WriteLine("My name is " + name);
    }
  }

  class Program {

    static void Main(string[] args) {

      // object of derived class
      Dog labrador = new Dog();

      // access field and method of base class
      labrador.name = "Rohu";
      labrador.display();

      // access method from own class
      labrador.getName();

      Console.ReadLine();
    }

  }
}

Salida

I am an animal
My name is Rohu

En el ejemplo anterior, hemos derivado una subclase Perro de la superclase Animal . Observe las declaraciones,

labrador.name = "Rohu";

labrador.getName();

Aquí, estamos usando labrador (objeto de Perro) para acceder al nombre y mostrar() del Animal clase. Esto es posible porque la clase derivada hereda todos los campos y métodos de la clase base.

Además, hemos accedido al nombre campo dentro del método del Dog clase.


es-una relación

En C#, la herencia es una relación is-a. Usamos la herencia solo si hay una relación es-un entre dos clases. Por ejemplo,

Podemos derivar Perro de Animales clase. Del mismo modo, Apple de Fruta clase y Coche desde Vehículo clase.


Miembros protegidos en la herencia de C#

Cuando declaramos un campo o método como protected , solo se puede acceder desde la misma clase y sus clases derivadas.

Ejemplo:miembros protegidos en herencia

using System;

namespace Inheritance {

  // base class
  class Animal { 
    protected void eat() {
      Console.WriteLine("I can eat");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {
     static void Main(string[] args) {

      Dog labrador = new Dog();

      // access protected method from base class
      labrador.eat();

      Console.ReadLine();
    }
  }
}

Salida

I can eat

En el ejemplo anterior, hemos creado una clase llamada Animal . La clase incluye un método protegido eat() .

Hemos derivado el Perro clase del Animal clase. Note la declaración,

labrador.eat();

Desde el protected se puede acceder al método desde clases derivadas, podemos acceder a eat() método del Dog clase.


Tipos de herencia

Existen los siguientes tipos de herencia:

1. Herencia única

En herencia simple, una sola clase derivada hereda de una sola clase base.

2. Herencia multinivel

En la herencia multinivel, una clase derivada hereda de una base y luego la misma clase derivada actúa como clase base para otra clase.

3. Herencia jerárquica

En la herencia jerárquica, varias clases derivadas heredan de una sola clase base.

4. Herencia múltiple

En la herencia múltiple, una única clase derivada hereda de varias clases base. C# no admite la herencia múltiple. Sin embargo, podemos lograr herencia múltiple a través de interfaces.

5. Herencia híbrida

La herencia híbrida es una combinación de dos o más tipos de herencia. La combinación de herencia multinivel y jerárquica es un ejemplo de herencia híbrida.


Anulación de métodos en la herencia de C#

Si el mismo método está presente tanto en la clase base como en la clase derivada, el método de la clase derivada anula el método de la clase base. Esto se denomina anulación de métodos en C#. Por ejemplo,

using System;

namespace Inheritance {

  // base class
  class Animal { 
    public virtual void eat() {

      Console.WriteLine("I eat food");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {

    // overriding method from Animal
    public override void eat() {

      Console.WriteLine("I eat Dog food");
    }     
  }
  class Program {

    static void Main(string[] args) {
      // object of derived class
      Dog labrador = new Dog();

      // accesses overridden method
      labrador.eat();
    }
  }
}

Salida

I eat Dog food

En el ejemplo anterior, eat() El método está presente tanto en la clase base como en la clase derivada.

Cuando llamamos a eat() usando el Perro objeto labrador ,

labrador.eat();

el método dentro de Dog se llama. Esto se debe a que el método dentro de Dog anula el mismo método dentro de Animal .

Aviso, hemos usado virtual y anular con métodos de la clase base y clase derivada respectivamente. Aquí,


Palabra clave base en la herencia de C#

En el ejemplo anterior, vimos que el método de la clase derivada anula el método de la clase base.

Sin embargo, ¿qué sucede si también queremos llamar al método de la clase base?

En ese caso, usamos el base palabra clave para llamar al método de la clase base de la clase derivada.

Ejemplo:palabra clave base en la herencia de C#

using System;

namespace Inheritance {

  // base class
  class Animal { 
    public virtual void eat() {

      Console.WriteLine("Animals eat food.");
    }
  } 
  
  // derived class of Animal 
  class Dog : Animal {

    // overriding method from Animal
    public override void eat() {
      
      // call method from Animal class
      base.eat();
      
      Console.WriteLine("Dogs eat Dog food.");
    }     
  }
  class Program {

    static void Main(string[] args) {

      Dog labrador = new Dog();
      labrador.eat();
    }
  }
}

Salida

Animals eat food.
Dogs eat Dog food.

En el ejemplo anterior, eat() El método está presente tanto en la clase base Animal y la clase derivada Perro . Note la declaración,

base.eat();

Aquí, hemos usado el base palabra clave para acceder al método de Animal clase del Perro clase.


Importancia de la herencia en C#

Para comprender la importancia de la herencia, consideremos una situación.

Supongamos que estamos trabajando con polígonos regulares como cuadrados, rectángulos, etc. Y tenemos que encontrar el perímetro de estos polígonos en función de la entrada.

1. Dado que la fórmula para calcular el perímetro es común para todos los polígonos regulares, podemos crear un RegularPolygon clase y un método calculatePerimeter() para calcular el perímetro.

class RegularPolygon {

  calculatePerimeter() {
    // code to compute perimeter
  }
}

2. Y heredar Cuadrado y Rectángulo clases del RegularPolygon clase. Cada una de estas clases tendrá propiedades para almacenar la longitud y el número de lados porque son diferentes para todos los polígonos.

class Square : RegularPolygon {

  int  length = 0;
  int sides = 0;
}

Pasamos el valor de la longitud y lados para calcular el perímetro() para calcular el perímetro.

Así es como la herencia hace que nuestro código sea reutilizable y más intuitivo.

Ejemplo:Importancia de la herencia

using System;

namespace Inheritance {

  class RegularPolygon {

      public void calculatePerimeter(int length, int sides) {

        int result = length * sides;
        Console.WriteLine("Perimeter: " + result);
      }
  }

  class Square : RegularPolygon {

    public int  length = 200;
    public int sides = 4;
    public void calculateArea() {

      int area = length * length;
      Console.WriteLine("Area of Square: " + area);
    }
  }

 class Rectangle : RegularPolygon {

    public int length = 100;
    public int breadth = 200;
    public int sides = 4;

    public void calculateArea() {
    
      int area = length * breadth;
      Console.WriteLine("Area of Rectangle: " + area);
    }
  }

  class Program {

    static void Main(string[] args) {

      Square s1 = new Square();
      s1.calculateArea();
      s1.calculatePerimeter(s1.length, s1.sides);
      

      Rectangle t1 = new Rectangle();
      t1.calculateArea();
      t1.calculatePerimeter(t1.length, t1.sides);
      
    }
  }
}     

Salida

Area of Square: 40000
Perimeter: 800
Area of Rectangle: 20000
Perimeter: 400

En el ejemplo anterior, hemos creado un RegularPolygon clase que tiene un método para calcular el perímetro del polígono regular.

Aquí, el Cuadrado y Rectángulo heredar de RegularPolygon .

La fórmula para calcular el perímetro es común para todos, por eso hemos reutilizado el calculatePerimeter() método de la clase base.

Y dado que la fórmula para calcular el área es diferente para diferentes formas, hemos creado un método separado dentro de la clase derivada para calcular el área.


Lenguaje C

  1. Clase y objeto de C#
  2. Modificadores de acceso de C#
  3. Palabra clave estática de C#
  4. Clase y método abstractos de C#
  5. Clase anidada de C#
  6. C# Clase parcial y método parcial
  7. Clase y método sellados de C#
  8. Polimorfismo en C++
  9. Abstracción de datos en C++
  10. C# - Estructura del programa
  11. C# - Sintaxis básica