2008-09-30 94 views

Respuesta

35

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.

6

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.

+0

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. –

+0

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. –

+0

También ** levemente ** ayuda con el rendimiento. – MagicKat

0

La palabra clave sealed funcionaría, pero todavía puede derivar de la clase utilizando la reflexión IIRC.

+0

también puede acceder a miembros privados con reflexión. no significa que sea una buena idea – Kilhoffer

+1

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 ... –

+1

¿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? –

1

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).

Cuestiones relacionadas