2011-06-15 7 views

Respuesta

7

Puede ponerlo y sus clases derivadas en un ensamblaje separado, y declarar el constructor de la clase base como internal. De esa manera, aunque podría heredar de ella en un ensamblaje diferente, no podría instanciar ninguna clase derivada.

+0

¿Cómo se puede heredar pero no se puede crear una instancia? – Mehrdad

+3

@Mehrdad: como la clase derivada llama al constructor de la base, debe tener acceso a ese constructor. Poner el acceso a 'interno' solo permite que las clases derivadas en el mismo ensamblaje (o ensamblajes de amigos) llamen a la base. También se debe tener en cuenta que las clases derivadas deben ser "selladas". –

+0

@Travis: ¿Pero cómo se puede hacer cumplir que las clases derivadas no se crean instancias? – Mehrdad

-1

Puede hacer que la clase A abstarct y heredar en cualquier número de clases ..

+1

Creo que en este caso que N = 3 –

+0

@Tom: por favor, vea la respuesta dada por Abatishchev, solo quería decir lo mismo ... Pensé que después de la sugerencia, descanse el interlocutor puede google ... – Stuti

4

No, pero siempre se puede hacer que el constructor de una excepción si se supera el límite.

+0

¿cómo puedo saber ¿Cuántas clases hereda de A? –

+0

Registre los tipos de 'this' en una tabla hash en el constructor de la clase base. – Koterpillar

3
// can be inherited only by classes in the same assembly 
public abstract class A 
{ 
    protected internal A() { } 
} 

// can't be inherited 
public sealed class B : A 
{ 
} 
1

Sólo para mi edificación personal, me gustaría saber más acerca del contexto de negocios que hacen esta elección de diseño deseable, ya que mi primera thougt al leer el título fue "Oh, muy, muy mala idea! Una la clase base NUNCA se supone que sepa nada (y lo que es peor: que gobierne) sus clases derivadas ".

Cuestiones relacionadas