"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Virtual/anulación versus nuevo en C#: ¿Cuándo debo usar qué palabra clave para el método anular?

Virtual/anulación versus nuevo en C#: ¿Cuándo debo usar qué palabra clave para el método anular?

Publicado el 2025-02-06
Navegar:390

Virtual/Override vs. New in C#: When Should I Use Which Keyword for Method Overriding?

virtual/anular y nuevas palabras clave en C#: ¿Cuándo usar qué palabra clave reescribir el método?

Al definir los métodos en las clases base, los programadores a menudo enfrentan el problema de usar las palabras clave "virtuales" o "nuevas". Esta decisión afecta significativamente el comportamiento de la reescritura de métodos en clases derivadas.

virtual anulación

Use la palabra clave "virtual" en el método de clase base para indicar que se puede anular en la clase derivada. Para anular el método, la clase derivada debe usar la palabra clave "anular". Esto asegura que el método anulado funcione como se esperaba, manteniendo la jerarquía de herencia y el polimorfismo.

Cuando la clase derivada llama a un método reescrito, realizará la versión anulada, incluso si la variable de referencia que contiene el objeto es del tipo de clase base. Esto se llama vinculación tardía y permite un comportamiento dinámico.

nueva palabra clave

en su lugar, la "nueva" palabra clave en el método de clase derivado declara un nuevo método que oculta los métodos heredados con el mismo nombre. Cuando se usa, el nuevo método reemplaza los métodos hereditarios en la clase derivada, destruyendo así el polimorfismo.

Cuando la clase derivada llama a un método declarado con "nuevo", ejecuta el nuevo método independientemente del tipo de variable de referencia que contiene el objeto. Esto se considera la unión temprana y dificulta el polimorfismo.

Ejemplo

Considere el siguiente ejemplo del código:

public class Base
{
    public virtual bool DoSomething() { return false; }
}

public class Derived : Base
{
    public new bool DoSomething() { return true; }
}

Si asigna una instancia de derivada a una variable de tipo base y llamada dosomething (), el resultado será falso si usa virtual/anulación, pero si usa nuevo, el resultado será verdadero. Esto resalta la diferencia entre la unión tardía y la unión temprana.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3