¿Cuál es la diferencia entre sobrecargar y anular?
c#
inheritance
Kirill Kobelev
fuente
fuente
Respuestas:
Sobrecarga
La sobrecarga es cuando tiene varios métodos en el mismo alcance, con el mismo nombre pero con diferentes firmas.
Primordial
La invalidación es un principio que le permite cambiar la funcionalidad de un método en una clase secundaria.
fuente
void
porgetStuff
entest2
getStuff(2, "Hello world!");
o puedo hacer estogetStuff("Myname", "Mysurname", "Hello World!");
? ¿Alguien puede confirmar que esta es la forma de hacerlo?Definiciones simples para sobrecargar y anular
Sobrecarga (polimorfismo de tiempo de compilación) :: Funciones con el mismo nombre y diferentes parámetros
Overriding (Run Time Polymorphism) :: Funciones en la clase extendida con el mismo nombre y los mismos parámetros que en la clase base, pero con diferentes comportamientos.
fuente
Quiero compartir un ejemplo que tuvo mucho sentido para mí cuando estaba aprendiendo:
Este es solo un ejemplo que no incluye el método virtual ni la clase base. Solo para dar una pista sobre la idea principal.
Digamos que hay una lavadora de vehículos y tiene una función llamada "Lavar" y acepta Coche como un tipo.
Obtiene la entrada del coche y lava el coche.
Sobrecarguemos la función Wash ()
Sobrecarga:
La función de lavado solo lavaba un automóvil antes, pero ahora también está sobrecargada para lavar un camión.
Anulemos la función Wash ()
Primordial:
La función de lavado ahora tiene una condición para verificar si el automóvil ya está limpio y no es necesario lavarlo nuevamente.
Si el automóvil está limpio, simplemente encerelo.
Si no está limpio, primero lave el automóvil, luego séquelo y luego encerelo
.
Entonces, la funcionalidad se ha anulado al agregar una nueva funcionalidad o hacer algo totalmente diferente.
fuente
Un entrevistador astuto habría seguido con:
¿Cuál es la diferencia entre anular y sombrear?
fuente
Como dijo Michael:
y
fuente
Tener más de un método / constructor con el mismo nombre pero diferentes parámetros se llama sobrecarga. Este es un evento de tiempo de compilación.
O / p:
La anulación es un evento en tiempo de ejecución, lo que significa que, según su código, la salida cambia en tiempo de ejecución.
Observe que hay un método común en ambas clases topSpeed (). Desde que creamos una instancia de Ferrari, obtenemos un resultado diferente.
O / p:
fuente
en C # no hay Java como anulación oculta , sin anulación de palabras clave en el método de anulación. vea estas implementaciones de C #:
variante 1 sin anulación : el resultado es 200
variante 2 con palabra clave de anulación : el resultado es 400
la palabra clave virtual en la clase Car es opuesta a final en Java, significa que no es final , puede anular o implementar si Car era abstracto
fuente
shadowing = mantiene dos definiciones en la clase derivada y, para proyectar la definición de la clase base, sombrea (oculta) la definición de la clase derivada y viceversa.
fuente
Otro punto para agregar.
Sobrecarga de más de un método con el mismo nombre. Mismo tipo de devolución o diferente. Diferente número de parámetros o Diferente tipo de parámetros. En la misma clase o clase derivada.
int Add (int num1, int num2) int Add (int num1, int num2, int num3) double Add (int num1, int num2) double Add (doble num1, doble num2)
Puede ser posible en la misma clase o clase derivada. Generalmente prefiere en la misma clase. Por ejemplo, Console.WriteLine () tiene 19 métodos sobrecargados.
Puede sobrecargar constructores de clases, métodos.
Se puede considerar como polimorfismo en tiempo de compilación (estático / enlace temprano).
================================================ ================================================ =
No es posible anular en la misma clase. Puede anular métodos de clase, propiedades, indexadores, eventos.
Tiene algunas limitaciones, como El método base anulado debe ser virtual, abstracto o anulado. No puede utilizar los modificadores nuevos, estáticos o virtuales para modificar un método de anulación.
Se puede considerar como polimorfismo en tiempo de ejecución (enlace dinámico / tardío).
Ayuda en el control de versiones http://msdn.microsoft.com/en-us/library/6fawty39.aspx
================================================ ================================================ =
Enlaces Útiles
http://msdn.microsoft.com/en-us/library/ms173152.aspx Polimorfismo en tiempo de compilación frente a polimorfismo en tiempo de ejecución
fuente
La sobrecarga es parte del polimorfismo estático y se usa para implementar diferentes métodos con el mismo nombre pero con diferentes firmas. La anulación se utiliza para completar el método incompleto. En mi opinión no hay comparación entre estos dos conceptos, lo único que es similar es que ambos vienen con el mismo vocabulario que se acabó.
fuente
La sobrecarga de métodos y la anulación de métodos son dos conceptos diferentes completamente diferentes. La sobrecarga de métodos tiene el mismo nombre de método pero con diferentes firmas. La invalidación del método es cambiar la implementación predeterminada del método de la clase base en la clase derivada. A continuación puede encontrar 2 excelentes tutoriales en video que explican estos conceptos.
Método que anula Vs ocultar
Sobrecarga de métodos
fuente
La sobrecarga es el concepto en el que tiene las mismas firmas o métodos con el mismo nombre pero diferentes parámetros y anulación, tenemos métodos con el mismo nombre con diferentes parámetros y también tenemos herencia que se conoce como anulación.
fuente