el reemplazo de métodos:
Cuando defina o implementar un método virtual en una clase padre y luego volver a colocarlo en una clase descendiente.
Cuando decide declarar un método como virtual, está dando permiso a las clases derivadas para extender y anular el método con su propia implementación. Puede hacer que el método extendido también llame al código del método principal.
En la mayoría de los lenguajes OO también puede optar por ocultar un método principal. Cuando introduce una nueva implementación del mismo método con la misma firma sin anular, está ocultando el método principal.
C# Overriding En C#, especifica un método virtual con la palabra clave virtual en una clase principal y la extiende (o la reemplaza) en una clase descendiente utilizando la palabra clave override.
Utilice la palabra clave base en el método descendiente para ejecutar el código en el método principal, es decir, base.SomeMethod().
Sintaxis Ejemplo:
class Robot
{
public virtual void Speak()
{
}
}
class Cyborg:Robot
{
public override void Speak()
{
}
}
Override detalles No se puede reemplazar un método no virtual regular, ni un método estático. La primera versión del método principal debe ser virtual o abstracta. Puede anular cualquier método principal marcado como virtual, abstracto o anular (ya anulado). Los métodos deben tener la misma firma. Los métodos deben tener la misma visibilidad (el mismo nivel de acceso). Use la palabra clave base para referirse a la clase principal como en base.SomeMethod(). C# Override Ejemplo El siguiente fragmento de código demuestra el uso de virtual y override para reemplazar un método principal en una clase descendiente.
using System;
class Dog
{
public virtual void Bark()
{
Console.WriteLine("RUFF!");
}
}
class GermanShepard:Dog
{
public override void Bark()
{
Console.WriteLine("Rrrrooouuff!!");
}
}
class Chiuaua:Dog
{
public override void Bark()
{
Console.WriteLine("ruff");
}
}
class InclusionExample
{
public static void Main()
{
Dog MyDog=new Dog();
MyDog=new GermanShepard();
MyDog.Bark(); // prints Rrrrooouuff!!
MyDog=new Chiuaua();
MyDog.Bark(); // prints ruff;
}
}
Ocultación de un método con Nueva utilizar la nueva palabra clave para introducir una nueva implementación de un método de matriz (esto oculta el método de los padres). Puede ocultar un método sin usar nuevo, pero obtendrá una advertencia del compilador. Usar nuevo suprimirá la advertencia.
Los modificadores nuevos y modificadores tienen diferentes significados. El nuevo modificador crea un nuevo miembro con el mismo nombre, firma y visibilidad, y oculta el miembro original. El modificador de modificación amplía la implementación de un miembro heredado y le permite implementar un polimorfismo basado en herencia.
Evitar la introducción de nuevos miembros: a veces hay razones claras para introducir un nuevo método con el mismo nombre, firma y visibilidad de un método principal. En esos casos claros, la introducción de un nuevo miembro es una característica poderosa. Sin embargo, si no tiene una razón clara, entonces evite introducir una nueva versión de un método nombrando el nuevo método como algo único y apropiado.
class Robot : System.Object
{
public void Speak()
{
MessageBox.Show("Robot says hi");
}
}
class Cyborg : Robot
{
new public void Speak()
{
MessageBox.Show("hi");
}
}
llamar a la clase Version Base Una tarea común en OO es extender un método mediante la ejecución primero el código del método de los padres y a continuación, añadir código. Use la palabra clave base para referirse a la clase padre como en base.SomeMethod().
class Robot : System.Object
{
public virtual void Speak()
{
MessageBox.Show("Robot says hi");
}
}
class Cyborg : Robot
{
public override void Speak()
{
base.Speak();
MessageBox.Show("hi");
}
}
Usted obtendrá un resultado diferente si canst DerivedClass a clase base antes de llamar a añadir: 1 => 2 y 2 => 1 – Peter
@CD .. no hay duplicado, es acerca de la "anulación y virtual" – Racooon
sería realmente mucho mejor publicar ejemplos que .... compilados. –