En C# es posible heredar campos y metodos de una clase a otra
podemos agrupar el concepto herencia en dos
- Clase derivada(hijo)la clase que hereda de otra clase
- Clase base(padre)la clase de que hereda
para heredar una clase se utilizan dos puntos (:)
Nel ejemplo seguiente la clase Car hereda los campos y metodos de la clase padre Vehiculo
Ejemplo
class Vehiculo // base class (parent) { public string brand = "Ford"; // Vehiculo field public void honk() // Vehiculo method { Console.WriteLine("Tuut, tuut!"); } } class Car : Vehiculo // derived class (child) { public string modelName = "Mustang"; // Car field } class Program { static void Main(string[] args) { // Create a myCar object Car myCar = new Car(); // Call the honk() method (From the Vehiculo class) on the myCar object myCar.honk(); // Display the value of the brand field (from the Vehiculo class) and the value of the modelName from the Car class Console.WriteLine(myCar.brand + " " + myCar.modelName); } }
Se debe utilizar las herencias para reutilizar el codigo
...
La palabra sealed
Si no desea que otras clases hereden de una clase usamos la palabra sealed
Ejemplo
sealed class Vehiculo { ... } class Car : Vehiculo { ... }
La salida sera una mensaje de error
Polimorfismo
Polimorfismo significa "muchas formas", y ocurre cuando tenemos muchas clases que están relacionadas entre sí por herencia.
La herencia nos permite heredar campos y métodos de otra clase.
Polimorfismo utiliza esos métodos para realizar diferentes tareas.
Esto nos permite realizar una sola acción de diferentes maneras.
Por ejemplo, piense en una clase base llamada Animalque tiene un método llamado animalSound(). Las clases derivadas de animales podrían ser cerdos, gatos, perros, pájaros, y también tienen su propia implementación de un sonido animal (el cerdo gruñe y el gato maúlla, etc.):
Ejemplo
class Animal // Base class (parent) { public void animalSound() { Console.WriteLine("The animal makes a sound"); } } class Pig : Animal // Derived class (child) { public void animalSound() { Console.WriteLine("The pig says: wee wee"); } } class Dog : Animal // Derived class (child) { public void animalSound() { Console.WriteLine("The dog says: bow wow"); } }
Ahora podemos crear objetos Pig y Dog y llamar al método animalSound() en ambos:
Ejemplo
class Animal // Base class (parent) { public void animalSound() { Console.WriteLine("The animal makes a sound"); } } class Pig : Animal // Derived class (child) { public void animalSound() { Console.WriteLine("The pig says: wee wee"); } } class Dog : Animal // Derived class (child) { public void animalSound() { Console.WriteLine("The dog says: bow wow"); } } class Program { static void Main(string[] args) { Animal myAnimal = new Animal(); // Create a Animal object Animal myPig = new Pig(); // Create a Pig object Animal myDog = new Dog(); // Create a Dog object myAnimal.animalSound(); myPig.animalSound(); myDog.animalSound(); } }
La salida sera:
The animal makes a sound The animal makes a sound The animal makes a sound
La salida no es la eserada porque el metodo de la clase base anula el metodo de la clase derivada, pero en C# tenemos dos palabras mas una para anular el metodo de la clase base virtual y la palavra override para la clase derivada
Ejemplo
class Animal // Base class (parent) { public virtual void animalSound() { Console.WriteLine("The animal makes a sound"); } } class Pig : Animal // Derived class (child) { public override void animalSound() { Console.WriteLine("The pig says: wee wee"); } } class Dog : Animal // Derived class (child) { public override void animalSound() { Console.WriteLine("The dog says: bow wow"); } } class Program { static void Main(string[] args) { Animal myAnimal = new Animal(); // Create a Animal object Animal myPig = new Pig(); // Create a Pig object Animal myDog = new Dog(); // Create a Dog object myAnimal.animalSound(); myPig.animalSound(); myDog.animalSound(); } }
La salida sera:
The animal makes a sound The pig says: wee wee The dog says: bow wow
El uso de la Herencia y polimorfismo es util por la reutilizacion del codigo
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias