2010-07-02 3 views
2

Je sais que quand héritant des classes, vous pouvez également hériter ConstructorsY at-il une convention pour l'utilisation Héritée Constructors

exemple:

class Book : Genre 
{ 
    Book(string param1, int param2, string inherit1, string inherit2) : Base(inherit1,inherit2) 
    { 
     Prop1 = param1 
     Prop2 = param2 
    } 
} 

Mais ne serait-il être plus facile de définir les propriétés héritées par le constructeur dans la classe héritée. Au lieu de référencer le constructeur de base?

class Book : Genre 
{ 
    Book(string param1, int param2, string inherit1, string inherit2) 
    { 
     Prop1 = param1 
     Prop2 = param2 
     InhProp3 = inherit1 
     InhProp4 = inherit2 
    } 
} 
+3

Veuillez ne pas dupliquer les balises comme "C#" dans le titre. Laissez-les dans les tags. –

Répondre

4

C'est différent, cependant. La définition de la propriété n'a pas le même comportement. Lorsque vous utilisez un constructeur de classe de base qui prend des paramètres, la classe de base a la possibilité de définir ces propriétés, et potentiellement avoir un comportement personnalisé basé sur ces paramètres, qui s'exécute avant le constructeur de la sous-classe.

Si vous définissez la propriété manuellement dans le constructeur de la sous-classe, le constructeur de la classe de base est déjà exécuté. Cela peut changer le comportement - parfois de manière significative (surtout si la classe de base est mal conçue).

De même, si la classe de base requiert cette information pour se construire, vous n'avez pas le choix. Souvent, les paramètres du constructeur font plus que simplement définir une propriété de la classe - ils peuvent être critiques pour la construction de l'objet lui-même.

3

Si votre classe de base à un moment donné a été repensée pour faire quelque chose de plus complexe que la simple définition de membres, vous serez heureux de l'avoir appelée. Si vous ne cherchez pas une erreur, trouvez-la après peut-être des heures de débogage. Et puis vous n'oublierez plus jamais de déléguer l'appel au constructeur de la classe de base :-)

1

La classe de base peut faire plus que simplement définir des propriétés. La classe de base peut être une classe pour laquelle vous n'avez pas le code source, donc vous ne savez même pas ce qu'elle fait avec.

1

Le constructeur de base peut faire plus que simplement définir des propriétés, il peut par exemple vérifier les références nulles. Si vous le faites dans la classe héritière, vous devrez répéter tout le code. Ensuite, vous auriez le même code à deux endroits, donc si le code devait changer, vous devriez savoir qu'il fallait changer dans les deux endroits.

1

Dépend de la façon dont la classe est conçue.

Peut-être que les propriétés sont public get; private set; Dans ce cas, votre classe dérivée n'a pas accès à définir les propriétés. En outre, iirc, appelant un constructeur pour définir des paramètres, génère moins d'IL que de définir les valeurs dans le corps de votre constructeur.