Ich lese Effective C # von Bill Wagner. In Punkt 14 - Minimieren der Logik für die doppelte Initialisierung zeigt er das folgende Beispiel für die Verwendung der neuen optionalen Parameterfunktion in einem Konstruktor:
public MyClass(int initialCount = 0, string name = "")
Beachten Sie, dass er ""
anstelle von verwendet string.Empty
.
Er kommentiert:
Sie werden [in einem Beispiel oben] feststellen, dass der zweite Konstruktor "" für den Standardwert im Parameter name angegeben hat und nicht den üblicheren
string.Empty
. Das liegt daran, dassstring.Empty
es sich nicht um eine Kompilierungszeitkonstante handelt. Es ist eine statische Eigenschaft, die in der Zeichenfolgenklasse definiert ist. Da es sich nicht um eine Kompilierungskonstante handelt, können Sie sie nicht als Standardwert für einen Parameter verwenden.
Wenn wir die string.Empty
Statik nicht in allen Situationen verwenden können, macht das dann nicht den Zweck zunichte? Ich dachte, wir würden es verwenden, um sicherzugehen, dass wir ein systemunabhängiges Mittel haben, um auf die leere Zeichenfolge zu verweisen. Ist mein Verständnis falsch? Vielen Dank.
UPDATE
Nur ein nachfolgender Kommentar. Laut MSDN:
Jeder optionale Parameter hat einen Standardwert als Teil seiner Definition. Wenn für diesen Parameter kein Argument gesendet wird, wird der Standardwert verwendet. Standardwerte müssen Konstanten sein.
Dann können wir System.Environment.NewLine
weder neu instanziierte Objekte noch als Standardwerte verwenden. Ich habe VS2010 noch nicht verwendet und das ist enttäuschend!