2010-07-23 5 views

Répondre

8

En IL, cela est possible. En C#: non.

Vous pouvez utiliser virtual pour exécuter une méthode dans un type avant le cteur de ce type, mais il est découragé et risqué. Mais:

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"); 
    } 
} 

Il est une mauvaise idée parce que vous ne pouvez pas garantir que les sous-classes sont prêtes pour la méthode d'appel.

+0

+1 pour déconseillé! –

0

Qu'est-ce que vous essayez d'accomplir? Peut-être pourriez-vous avoir une méthode abstraite appelée de la classe de base ctor?

+1

Le fait que vous sentez que vous avez besoin de faire cela indique à mon avis qu'il y a un défaut dans votre conception ou dans votre façon de penser. Je suggère d'examiner attentivement vos motifs pour essayer de le faire. – NeilDurant

+0

Bon, c'est pourquoi je demande quel est le but ici. –

Questions connexes