En Java, podría hacer esto con la palabra clave 'final'. No veo 'final' en C#. ¿Hay un sustituto?¿Cómo puedo evitar que una clase se herede en C#?
Respuesta
Está buscando la palabra clave sealed
. Hace exactamente lo que hace la palabra clave final
en Java. Los intentos de heredar generarán un error de compilación.
Como Joel ya recomendó, puede usar sealed
en lugar de final
en C#.
http://en.csharp-online.net/CSharp_FAQ:_Does_CSharp_support_final_classes
También tenga en cuenta que "no creo que alguien alguna vez tendrá que heredar de esta" no es una buena razón para usar "sellado". A menos que tenga una necesidad específica de asegurarse de que se use una implementación en particular, deje la clase sin sellar.
La palabra clave sealed
funcionaría, pero todavía puede derivar de la clase utilizando la reflexión IIRC.
también puede acceder a miembros privados con reflexión. no significa que sea una buena idea – Kilhoffer
Dudo mucho que puedas derivar de la clase usando reflexión, tampoco. Si alguien me muestra una clase derivada de System.String, lo creeré, pero hasta entonces ... –
¿Heredar a través de la reflexión? Ni siquiera veo cómo funcionaría eso o que CLR le prestaría atención aunque lo intentaras. ¿Puedes ampliar ese reclamo? –
El modificador sealed
hará lo que final
hace en Java.
Además, aunque esto probablemente no es lo que está buscando en esta situación, marcar una clase como static
también evita que se herede (queda sellada entre bastidores).
- 1. cómo evitar que css herede
- 2. ¿Cómo evitar que una clase abstracta con clases públicas derivadas se herede en otros ensambles?
- 3. ¿La manera más fácil de hacer que C# no instanciar una clase a menos que herede?
- 4. ¿Cómo puedo hacer que mi clase de destino DebuggerTypeProxy herede los proxies base?
- 5. ¿Cómo puedo evitar que una ventana de diálogo se oculte?
- 6. Cómo evitar que se anule un método en C#
- 7. ¿Cómo puedo evitar que se seleccione texto?
- 8. cómo evitar que la clase 'a' sea heredada por otra clase?
- 9. ¿Cómo evitar que HTML-div/CSS inyectado herede estilos? (Internet Explorer)
- 10. Cómo evitar que se anule una función en python
- 11. ¿Cómo puedo evitar que se clasifiquen los nombres de propiedad en los diagramas de clase?
- 12. ¿Cómo evitar que se desinstale una aplicación?
- 13. ¿Cómo se implementa una clase en C?
- 14. En caso de que una interfaz herede otra interfaz
- 15. ¿Cómo evitar que una aplicación se fije en Windows 7?
- 16. ¿Cómo puedo evitar una InvalidCastException en .NET?
- 17. Evitar que una subclase de C# sobrescriba un método
- 18. ¿Cómo evitar programáticamente que una Mac se quede dormida?
- 19. ¿Por qué deberías evitar que una clase sea subclasificada?
- 20. C++ ¿Cómo es que no puedo asignar una clase base a una clase para niños?
- 21. ¿Cómo puedo evitar que se genere un atributo de validación?
- 22. ¿Cómo evitar que un objeto se cree en el montón?
- 23. cómo evitar que Sinatra se ejecute?
- 24. ¿Se debe instanciar una clase en C#?
- 25. ¿Cómo puedo hacer que una Clase se extienda Observable cuando también se ha extendido otra clase?
- 26. Cómo puedo evitar que un miembro de datos se serialice
- 27. ¿Cómo puedo evitar que se sobrescriban los artefactos desplegados anteriormente?
- 28. ¿Cómo puedo evitar que CompileAssemblyFromSource pierda memoria?
- 29. ¿Cómo puedo evitar que un heredero invoque un constructor base en C#?
- 30. ¿Cómo puedo evitar que mercurial empuje subrepos?
No estoy de acuerdo. La herencia a menudo se usa mal, y la mayoría de las clases no están codificadas con herencia en mente. Entonces, a menos que una clase se haya diseñado para ser heredada, debería estar sellada por defecto. Entonces, cuando alguien hereda de su clase sellada, podría obligarlos a pensar un poco más. –
Estoy de acuerdo con Robert (es decir, no estoy de acuerdo con Mark). La herencia es algo que requiere una gran consideración cuidadosa. Por ejemplo, cada vez que llamas a un método virtual desde otro, estás bloqueando esa implementación: cambiar la llamada para que sea al revés puede romper las clases derivadas. –
También ** levemente ** ayuda con el rendimiento. – MagicKat