Saya membaca Effective C # oleh Bill Wagner. Di Item 14 - Minimize Duplicate Initialization Logic , dia menunjukkan contoh berikut menggunakan fitur parameter opsional baru dalam konstruktor:
public MyClass(int initialCount = 0, string name = "")
Perhatikan bahwa ia menggunakan ""
bukannya string.Empty
.
Dia berkomentar:
Anda akan melihat [dalam contoh di atas] bahwa konstruktor kedua menetapkan "" untuk nilai default pada parameter name , bukan yang lebih umum
string.Empty
. Itu karenastring.Empty
bukan konstanta waktu kompilasi. Ini adalah properti statis yang ditentukan dalam kelas string. Karena ini bukan konstanta kompilasi, Anda tidak dapat menggunakannya sebagai nilai default untuk parameter.
Jika kita tidak dapat menggunakan string.Empty
statik dalam semua situasi, bukankah itu menggagalkan tujuannya? Saya pikir kami akan menggunakannya untuk memastikan bahwa kami memiliki cara yang tidak bergantung sistem untuk merujuk ke string kosong. Apakah pemahaman saya salah? Terima kasih.
UPDATE
Hanya komentar tindak lanjut. Menurut MSDN:
Setiap parameter opsional memiliki nilai default sebagai bagian dari definisinya. Jika tidak ada argumen yang dikirim untuk parameter itu, nilai default akan digunakan. Nilai default harus berupa konstanta.
Kemudian kita tidak dapat menggunakan System.Environment.NewLine
keduanya, atau menggunakan objek yang baru dibuat sebagai nilai default. Saya belum pernah menggunakan VS2010, dan ini mengecewakan!