In C #, was ist die beste / akzeptierte Art der Konstruktorverkettung?

8

Gegeben die folgende Klasse:

%Vor%

Ich bin zerrissen zwischen zwei Möglichkeiten, diese Konstruktoren zu verketten:

Der erste :

%Vor%

Der zweite:

%Vor%

Also, ist es besser, vom parameterlosen Konstruktor zu ketten oder umgekehrt?

    
Stécy 22.09.2009, 17:55
quelle

7 Antworten

13

Mit Ihrem Beispiel würde ich den ersten Weg gehen. Die zweite beseitigt keine Codeverdopplung, die Sie vermutlich vermeiden möchten, da Sie _param noch explizit festlegen müssen. Der leere Aufruf this() im zweiten Ansatz ist völlig kostenlos.

    
Adam Lear 22.09.2009, 17:58
quelle
4

Ich bevorzuge die erste. Das Verhalten der Konstruktoren wird immer kohärent und vorhersagbar sein, und außerdem wird die Codeverdopplung reduziert.

    
Joel Day 22.09.2009 17:59
quelle
3

Kette von Pramater weniger zu Pramater,

also Aufruf von Lessor-Param-Konstruktoren mit Standardwerten an mehr Parameter

%Vor%     
Adriaan Stander 22.09.2009 18:00
quelle
1

Ich würde mir vorstellen, dass es immer besser ist, von kleiner nach größer zu ketten, dh warum sollte eine leere Zeichenkette dann eine gegebene Zeichenkette im Konstruktor zugewiesen werden, wenn es sinnvoller ist, dem parametrisierten Konstruktor den Standardwert (string.Empty) zu übergeben.

    
Lazarus 22.09.2009 18:01
quelle
1

Ich bevorzuge auch das erste. Genau wie in einer komplexen abgeleiteten Klasse, die von einer einfachen Basisklasse erbt, möchten Sie, dass der "komplexe" Konstruktor auf der Funktionalität der "grundlegenden" Klasse aufbaut.

    
Jason Williams 22.09.2009 18:03
quelle
1

Das zweite Beispiel in Ihrem Fall ergibt keinen Sinn, da Sie die Zuweisung des Klassenmembers duplizieren (wenn Sie MyClass (string param) constructor verwenden).

Der zweite Ansatz ist sinnvoller, wenn verkettete Konstruktoren "Funktionalität hinzufügen".

Beispiel:

%Vor%

In Ihrem speziellen Fall ist das erste Beispiel offensichtlich viel geeigneter, da Sie nur eine Zuweisung für dasselbe Element haben.

    
Peter Stegnar 22.09.2009 18:24
quelle
0

Wenn Sie hier Ihr Ziel als "Bereitstellen eines Standards, wenn kein Wert angegeben ist" angeben, sollten Sie eindeutig den ersten Ansatz verwenden.

Die allgemeine Regel wäre dann: Kette vom am wenigsten spezifischen Konstruktor zum am meisten spezifischen.

    
Bryan Watts 22.09.2009 18:02
quelle

Tags und Links

yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warningyii\base\ErrorException

PHP Startup: Unable to load dynamic library 'mongodb.so' (tried: /usr/lib64/php/modules/mongodb.so (/usr/lib64/php/modules/mongodb.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mongodb.so.so (/usr/lib64/php/modules/mongodb.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '331078',
    'url' => 'in-c-what-is-the-best-accepted-way-of-doing-constructor-chaining',
];

$_SESSION = [
    '__flash' => [],
];