Con esto quiero decir, es posible marcar un método virtual en C# como final, por lo que ningún otro tipo derivado de este tipo puede anularlo nunca más.¿Es posible finalizar un método virtual en C#?
Respuesta
Sí: al anular un método, también puede declararlo sealed
.
Buena respuesta. Un punto de aclaración al OP; solo las anulaciones de los métodos virtuales (que también son virtuales) pueden sellarse; la declaración que tiene 'virtual' tampoco puede ser' sellada'. Es redundante; la palabra clave sellada "deshace" una palabra clave virtual o abstracta que hace que el método sea virtual en la clase base. Debe haber al menos un nivel de herencia entre virtualizar el método y sellarlo. – KeithS
Gracias KeithS, ¿pueden dar un ejemplo de código para esto? No creo haberlo entendido –
básicamente, 'anulación pública sellada anular MyMethod()' compila. 'void virtual sellado virtual MyMethod()' no, porque en el mismo nivel de herencia, está marcando el método como invalidable y no invalidable. Es redundante; 'public void MyMethod()' crearía un método no invalidable. Ese era el punto que estaba tratando de hacer; aunque los métodos virtuales pueden sellarse, en realidad deben ser reemplazos del método base que originalmente se marcó como virtual. – KeithS
Puede usar sealed.
- 1. ¿Es posible anular un método no virtual?
- 2. En C++, ¿es posible tener una función puramente virtual definida?
- 3. Método virtual privado en C++
- 4. ¿Podemos tener un método estático virtual? (C++)
- 5. C++ llamada a un método virtual en clase hija
- 6. ¿Es posible finalizar manualmente una sesión de Google Analytics?
- 7. ¿Puedo usar un método que anule un método no virtual?
- 8. ¿Es posible emitir una señal Qt desde un método const?
- 9. ¿Es posible declarar un valor constante estático virtual en una clase de C++?
- 10. ¿Es posible crear el método call dispatcher en C++?
- 11. es posible sobrecargar un método final
- 12. Mock método C no virtual ++ (gmock)
- 13. ¿Cómo finalizar un programa en C++ después de un error?
- 14. ¿Cómo se diferencia la sobrecarga de un método virtual de un método no virtual?
- 15. ¿Es posible anular un constructor en C#?
- 16. ¿Es posible definir un método de extensión genérico en F #?
- 17. ¿Método abstracto o virtual?
- 18. ¿Es posible seleccionar varias columnas en Virtual Treeview?
- 19. ¿Es posible finalizar un proceso muy bien en una aplicación Java?
- 20. método virtual puro Llamado
- 21. ¿Es posible llamar a un método de espera en un método no asíncrono?
- 22. Accediendo a un miembro/método de una clase derivada virtual
- 23. ¿Qué es un "método estático" en C#?
- 24. ¿Es posible vincular datos a un método en Silverlight?
- 25. ¿Es posible evitar que un método se muestre en intellisense?
- 26. ¿es posible anular un método en tiempo de ejecución?
- 27. ¿Es posible anular un método estático en la clase derivada?
- 28. es posible refactorizar esto en un solo método
- 29. ¿Es posible crear un método de solo depuración en .NET?
- 30. ¿Qué es el método virtual llamando en java?
Por curiosidad, ¿cuál es su caso de uso? Esta es una característica bastante rara vez utilizada. ¿Cuál es el escenario que tiene donde tiene sentido sellar el * método * pero no la * clase *? –
@Eric: En realidad, no tengo ningún caso de uso: O Pero lo que sucedió es esto. Estoy usando una biblioteca .NET de terceros que todavía no está disponible. Esta biblioteca tiene muchos tipos donde solo tienen constructores internos. Quiero hacer mis propios tipos derivados de estos, pero tal como están, no es posible porque los constructores deben ser públicos. Se lo pregunté, y me dijeron que los métodos virtuales pueden causar problemas difíciles de depurar, por lo que no pueden hacer esto. Recordaba vagamente una forma de "finalizar"/sellar los métodos virtuales, por eso pregunté esto y les dije que, si están interesados, pueden usar ... –
la palabra clave sellada para sellar esos métodos virtuales. También les dijo que si la herencia no está destinada a su biblioteca, entonces los tipos deben ser sellados por su desempeño. Pero con estos tipos que tienen constructores internos, no es posible realmente hacer uso de ellos. ¿Qué piensas? ¿Crees que sus preocupaciones contra la herencia y los métodos virtuales son válidos? –