2010-10-23 10 views
1

Disons que j'ai un père et son fils qui doit être à la fois non abstraite et je ne vais pas à faire le tour du père c'tor ce que je l'ai fait est le suivant:Inertie comment faire le tour constructeur de base

public class D 
{ 
    public D(int x) { } 

    public D() 
    { 
     Console.WriteLine("D:constructor"); 
    } 

} 
public class E:D 
{ 
    public E() : base(1) 
    { 
     Console.WriteLine("E:constructor"); 
    } 

}

Existe-t-il un autre moyen plus élégant de contourner le constructeur père?

EDIT: c'est juste un échantillon J'ai une raison pour l'inertie est à une pratique de Dieu ou juste parce que le c'tor est différent je devrais construire un autre design?

+0

"quoi?" est trop court pour un commentaire, mais parfait pour ce cas. – Grozz

+0

Qu'est-ce qui n'est pas élégant à ce sujet? Si vous voulez utiliser le constructeur hérité, vous le faites de la bonne façon. – jsmith

Répondre

0

C'est la façon dont les constructeurs de base sont gérés dans C#. La seule solution plus élégante que je pourrais suggérer est de faire très peu dans votre constructeur par défaut au sein de votre classe de père. Peut-être seulement initialiser les attributs appropriés, ou peut-être ne rien faire. De cette façon, si vous ne voulez pas que "D: constructor" soit édité, vous pouvez toujours utiliser le constructeur par défaut pour E, sans appeler le constructeur de base qui nécessite un int.

Le problème n'est pas lié à la manière dont il a été conçu, mais à la manière dont vous créez vos constructeurs.

+0

donc le meilleur moyen est d'utiliser une méthode virtuelle et ce serait celui qui change? –

0

Il n'existe aucun moyen de contourner le constructeur de base. Même si vous mettez en œuvre ce qui précède, vous passez toujours par un constructeur 'a', mais c'est ce que vous pouvez faire de mieux.