Heredar de varias clases en C#

Saad Aslam 12 octubre 2023
Heredar de varias clases en C#

Una clase u objeto puede heredar funciones y características de uno o más objetos o clases principales en el lenguaje OOP. Cuando una subclase requiere acceso a alguna o todas las propiedades de una clase principal, se utiliza la herencia.

También es útil cuando la clase de un niño necesita fusionar muchos constructores de clases base. En este tutorial, abordaremos cómo implementar herencias múltiples en C#.

Implementar Herencia Múltiple en C#

En el lenguaje C#, la técnica más conocida y sencilla es la utilización de interfaces. Aquí tenemos un ejemplo en el que implementaremos la herencia de múltiples clases para calcular el IMC.

Aprenderemos esto paso a paso. En primer lugar, necesitamos importar la biblioteca Sistema para acceder a los métodos utilizados en C#.

using System;

Crearemos una clase llamada Attributes con los métodos setter, que usaremos para recuperar valores de las otras clases. Declare dos variables de tipo doble dentro de él llamadas weight y height.

Los mantendremos protegidos, lo que significa que no estarán disponibles para nadie fuera de nuestra clase. A continuación, cree un método setWeight() con un argumento de tipo doble w que asigne el valor proporcionado a weight, y cree el método setHeight() que establecerá el valor de height en el mismo camino como este.

class Attributes {
  protected double weight;
  protected double height;
  public void setWeight(double w) {
    weight = w;
  }

  public void setHeight(double h) {
    height = h;
  }
}

Luego, cree una interfaz RetrieveAge que contenga un método de tipo doble retrieveAge que tome un argumento edad de tipo de datos doble.

public interface RetrieveAge {
  double retrieveAge(double age);
}

Cree una clase BMI que heredará dos clases, Attributes y RetrieveAge. Crearemos 4 métodos para recuperar valores de sus clases principales dentro de esta clase.

El primer método es un tipo de datos doble llamado retrieveBMI(), que obtiene el peso y la altura de la clase padre Attributes, divide el peso por el cuadrado de la altura y devuelve el resultado. Los siguientes dos métodos, retrieveHeight() y retrieveWeight(), obtendrán los valores de altura y peso y los devolverán.

El último método, retrieveAge(), extiende el método de RetrieveAge que toma un argumento age de tipo doble y lo devuelve.

class BMI : Attributes, RetrieveAge {
  public double retrieveBMI() {
    return (weight / (height * height));
  }

  public double retrieveHeight() {
    return height;
  }

  public double retrieveWeight() {
    return weight;
  }

  public double retrieveAge(double age) {
    return age;
  }
}

Creamos nuestra clase final que tendrá la función Main(). Dentro de la función principal, cree una instancia de clase BMI.

Usa los métodos setHeight() y setWeight() para asignar altura y peso. Finalmente, necesitamos generar la altura, el peso, el IMC calculado y la edad.

Código completo:

using System;

class Attributes {
  protected double weight;
  protected double height;
  public void setWeight(double w) {
    weight = w;
  }

  public void setHeight(double h) {
    height = h;
  }
}

public interface RetrieveAge {
  double retrieveAge(double age);
}

class BMI : Attributes, RetrieveAge {
  public double retrieveBMI() {
    return (weight / (height * height));
  }

  public double retrieveHeight() {
    return height;
  }

  public double retrieveWeight() {
    return weight;
  }

  public double retrieveAge(double age) {
    return age;
  }
}

class TotalBMI {
  static void Main() {
    BMI bmi = new BMI();
    bmi.setWeight(80);
    bmi.setHeight(2.07);

    Console.WriteLine("Your Height: {0} m", bmi.retrieveHeight());
    Console.WriteLine("Your Weight: {0} kg", bmi.retrieveWeight());
    Console.WriteLine("BMI: {0}", bmi.retrieveBMI());
    Console.WriteLine("Age: {0}", bmi.retrieveAge(40));
  }
}

Producción :

Your Height: 2.07 m
Your Weight: 80 kg
BMI: 18.6702140073281
Age: 40
Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

Artículo relacionado - Csharp Class