2010-07-23 20 views

Respuesta

8

En IL, esto es posible. En C#: no.

Usted puede utilizar virtual para ejecutar un método en un tipo antes ctor de ese tipo, pero no se recomienda y arriesgado. Pero:

class Foo { 
    public Foo() { 
     Console.WriteLine("Foo ctor"); 
     SomeMethod(); // BAD IDEA (calling a virtual method in a ctor) 
    } 
    protected virtual void SomeMethod() {} 
} 
class Bar : Foo { 
    protected override void SomeMethod() { 
     Console.WriteLine("SomeMethod in Bar"); 
    } 
    public Bar() : base() { /* only to show call order */ 
     Console.WriteLine("Bar ctor"); 
    } 
} 

Es una mala idea porque no se puede garantizar que las subclases son listo para el método de guardia.

+0

+1 por desalentado! –

0

¿Qué es lo que estás tratando de lograr? ¿Quizás podría tener un método abstracto que se llame desde el ctor de la clase base?

+1

El hecho de que sienta que necesita hacer esto me indica que hay algún defecto en su diseño o su forma de pensar. Sugeriría considerar cuidadosamente sus motivos para tratar de hacer esto. – NeilDurant

+0

Correcto, es por eso que estoy preguntando cuál es el objetivo aquí. –

Cuestiones relacionadas