2008-11-27 13 views
10

tengo una clase BasePage cual todas las demás páginas se derivan de:¿Cómo puedo forzar al constructor base a llamarse en C#?

public class BasePage 

Este BasePage tiene un constructor que contiene código que siempre debe ejecutar:

public BasePage() 
{ 
    // Important code here 
} 

me quieren obligar a las clases derivadas para llamar al constructor base, así:

public MyPage 
    : base() 
{ 
    // Page specific code here 
} 

¿Cómo puedo hacer cumplir este (preferiblemente en tiempo de compilación)?

Respuesta

24

El constructor base siempre se llamará en algún momento. Si llama al this(...) en lugar de base(...), entonces llama a otro constructor en la misma clase, que nuevamente tendrá que llamar a otro constructor hermano o un constructor padre. Tarde o temprano siempre llegarás a un constructor que llame base(...) explícita o implícitamente llama a un constructor sin parámetros de la clase base.

Consulte this article para obtener más información sobre el encadenamiento de constructores, incluidos los puntos de ejecución de los distintos bits (como los inicializadores de variables).

8

El constructor de la clase base que no toma argumentos se ejecuta automáticamente si no llama a ningún otro constructor de la clase base que tome argumentos explícitamente.

+0

¿Significa eso que puedo eliminar la línea que contiene: base()? – tjrobinson

+0

sí, puedes por completo :) –

+0

Espléndido, gracias. – tjrobinson

3

Siempre se llama al constructor de la clase base, incluso si no lo llama explícitamente. Entonces no necesita hacer ningún trabajo adicional para asegurarse de que eso suceda.

1

Uno de los constructores base siempre necesita ser llamado, y el predeterminado se llama cuando el constructor base no está explícitamente establecido.

Editar: reformulado para mayor claridad.

Cuestiones relacionadas