Czytam Efektywny C # autorstwa Billa Wagnera. W punkcie 14 - Minimize Duplicate Initialization Logic , przedstawia on następujący przykład użycia nowej funkcji parametrów opcjonalnych w konstruktorze:
public MyClass(int initialCount = 0, string name = "")
Zauważ, że użył ""
zamiast string.Empty
.
On komentuje:
Zauważysz [w powyższym przykładzie], że drugi konstruktor określił „” jako domyślną wartość parametru name , a nie bardziej zwyczajową
string.Empty
. Dzieje się tak, ponieważstring.Empty
nie jest to stała czasu kompilacji. Jest to statyczna właściwość zdefiniowana w klasie string. Ponieważ nie jest to stała kompilacji, nie można jej użyć jako wartości domyślnej parametru.
Jeśli nie możemy użyć string.Empty
statyki we wszystkich sytuacjach, czy nie jest to sprzeczne z jej celem? Pomyślałem, że użyjemy go, aby upewnić się, że mamy niezależny od systemu sposób odwoływania się do pustego łańcucha. Czy moje zrozumienie jest złe? Dzięki.
UPDATE
Tylko komentarz uzupełniający. Według MSDN:
Każdy opcjonalny parametr ma wartość domyślną jako część swojej definicji. Jeśli dla tego parametru nie zostanie przesłany żaden argument, używana jest wartość domyślna. Wartości domyślne muszą być stałymi.
W takim przypadku nie będziemy mogli System.Environment.NewLine
ani używać ani używać nowo utworzonych obiektów jako wartości domyślnych. Nie korzystałem jeszcze z VS2010 i to jest rozczarowujące!