Saya perhatikan bahwa dengan parameter opsional di C # 4 jika Anda menentukan parameter opsional pada antarmuka yang Anda tidak perlu t membuat parameter itu opsional pada setiap kelas pelaksana:
public interface MyInterface
{
void TestMethod(bool flag = false);
}
public class MyClass : MyInterface
{
public void TestMethod(bool flag)
{
Console.WriteLine(flag);
}
}
dan oleh karena itu:
var obj = new MyClass();
obj.TestMethod(); // compiler error
var obj2 = new MyClass() as MyInterface;
obj2.TestMethod(); // prints false
Adakah yang tahu mengapa parameter opsional dirancang untuk bekerja seperti ini?
Di satu sisi saya kira kemampuan untuk menimpa nilai default apa pun yang ditentukan pada antarmuka berguna meskipun jujur saya tidak yakin apakah Anda bahkan dapat menentukan nilai default pada antarmuka karena itu harus menjadi keputusan implementasi.
Di sisi lain, pemutusan ini berarti Anda tidak bisa selalu menggunakan kelas konkret dan antarmuka secara bergantian. Ini tentu saja, tidak akan menjadi masalah jika nilai default ditentukan pada implementasi, tetapi kemudian jika Anda mengekspos kelas beton Anda sebagai antarmuka (menggunakan beberapa kerangka kerja IOC untuk menyuntikkan kelas beton misalnya) maka benar-benar tidak ada titik memiliki nilai default sebagai penelepon harus selalu memberikannya.
MyInterface
dan menyebutnya dengan parameter opsional: ((MyInterface)obj).TestMethod();
.