Se recomienda utilizar la anulación en lugar de la nueva palabra clave en C#. ¿Por qué esa regla?¿Cómo elegir entre nuevo y reemplazar en C#?
Respuesta
"nuevo" significa que tiene dos métodos completamente diferentes en lo que respecta al CLR: tienen el mismo nombre, pero no están relacionados en términos de herencia. Eso significa que si ejecuta:
Base b = new Derived();
Derived d = new Derived();
b.MyMethod(); // Calls Base.MyMethod
d.MyMethod(); // Calls Derived.MyMethod
Esto puede generar un código muy difícil de comprender.
Por lo general, si desea diferentes métodos, llámelos diferentes cosas. La razón normal para usar el mismo nombre (y firma) es anular el comportamiento del método de una clase base. En ese momento, no tiene otra opción que mantener el nombre/firma igual.
Todavía estoy tratando de averiguar qué es el caso de uso para "nuevo" aparte de horrible hacking.
Esto es en realidad no a elección usted tiene. Esto se te impone por la creación de la clase base. Si existe un método con el mismo nombre y está marcado como "virtual", debe utilizar la anulación a menos que desee tener algunos errores graciosamente divertidos que aparezcan en el futuro cuando las personas comiencen a enviar objetos de su clase a la clase base ...
Aunque si ese método NO está marcado como "virtual", entonces la única forma de crear un NUEVO método es mediante el uso de la palabra clave "nueva". Sin embargo, tenga en cuenta que esto no reemplazará las invocaciones de métodos donde la referencia es de typeof (clase base) para su método. Así que esto es principalmente azúcar sintáctica para crear un nuevo método con el mismo nombre y la misma firma ...
Aunque cuando el código golpea tu plancha no es otra cosa que un método completamente diferente con el mismo nombre y la misma firma. Cuando un método reemplazado será reemplazar cada sola llamada incluidos los de la clase base de montaje a su nuevo método de ...
Así compararlos es como comparar coches y errh ... pájaros o algo ..
- 1. ¿Cómo elegir entre parList y parBuffer?
- 2. Cómo elegir entre DTD y XSD
- 3. Diferencia entre sombras (VB.NET) y nuevo (C#)
- 4. Elegir entre Prism y Caliburn
- 5. Elegir entre Dibujo y Forma en WPF
- 6. ¿Cómo elegir entre 'window.URL.createObjectURL() `y` window.webkitURL.createObjectURL() `basado en navegador
- 7. Cómo elegir entre protobuf-csharp-port y protobuf-net
- 8. Elegir entre MEF y MAF (System.AddIn)
- 9. ¿Elegir entre glMatrix, Sylvester y CanvasMatrix?
- 10. Reemplazar un elemento y devolver el nuevo en jQuery
- 11. Reemplazar todo entre [y] en regex java
- 12. borrar y nuevo en C++
- 13. Diferencias entre Dictionary.Clear y el nuevo Dictionary()
- 14. pyopengl: ¿Podría reemplazar C++?
- 15. C++ mezclar nuevo/eliminar entre libs?
- 16. Elegir entre Berkeley DB Core y Berkeley DB JE
- 17. Cómo reemplazar una cadena que no distingue entre mayúsculas y minúsculas en el objetivo-c iphone?
- 18. ¿Cómo elegir entre Cassandra, Membase, Hadoop, MongoDB, RDBMS, etc.?
- 19. F # sintaxis del constructor - reemplazar y aumentar el nuevo
- 20. Diferencia entre XMLReader.Create() y nuevo XMLTextReader()
- 21. Cómo elegir entre dos métodos del mismo nombre en Java
- 22. C# Regex - Igualar y reemplazar, Incremento automático
- 23. Elegir entre la excepción y el valor de retorno
- 24. ¿Cómo elegir entre el patrón de espacios en blanco?
- 25. diferencia entre el nuevo y anular
- 26. Nuevo proyecto: Tengo problemas para elegir un idioma para usar
- 27. alloc, inicio y nuevo en Objective-C
- 28. Elegir entre Hudson y CruiseControl a largo plazo
- 29. ¿Elegir entre métodos de instancia y funciones gratuitas?
- 30. ¿Cuándo elegir entre la interfaz web y la GUI nativa?
There * IS * no usecase, es * otro * método que pasa a tener el "mismo nombre", punto ... –
El caso de uso es bastante simple, en realidad. Los pasos son: 1) deriva de una clase que no está bajo su control (por ejemplo, una del marco). 2) Presenta un nuevo método llamado Foo(). 3) Una versión posterior de la clase base también presenta a Foo(). 4) Obtienes una advertencia de compilación y la arreglas. –
Las opciones para solucionarlo son: a) Cambiar el nombre del método (no siempre es factible). b) Agregue el modificador "nuevo". Y sí, esta es una situación desagradable que debes evitar siempre que sea posible, pero es agradable que C# al menos te permita sobrellevarlo. –