Я помітив, що з необов'язковими параметрами в C # 4, якщо ви вказуєте необов'язковий параметр в інтерфейсі, який ви не робите , не потрібно робити цей параметр необов’язковим для будь-якого класу реалізації:
public interface MyInterface
{
void TestMethod(bool flag = false);
}
public class MyClass : MyInterface
{
public void TestMethod(bool flag)
{
Console.WriteLine(flag);
}
}
і таким чином:
var obj = new MyClass();
obj.TestMethod(); // compiler error
var obj2 = new MyClass() as MyInterface;
obj2.TestMethod(); // prints false
Хтось знає, чому додаткові параметри розроблені для роботи таким чином?
З одного боку, я вважаю, що можливість змінити значення за замовчуванням, вказані на інтерфейсах, є корисною, хоча, якщо чесно, я не впевнений, чи потрібно вам навіть в інтерфейсі вказати значення за замовчуванням, оскільки це має бути рішенням про реалізацію.
З іншого боку, цей відключення означає, що ви не завжди можете використовувати бетонний клас та інтерфейс взаємозамінно. Це, звичайно, не буде проблемою, якщо в реалізації буде вказано значення за замовчуванням, але тоді, якщо ви виставляєте конкретний клас як інтерфейс (використовуючи якусь рамку МОК для введення конкретного класу, наприклад), тоді насправді немає точка, яка має значення за замовчуванням, як абонент, повинен буде її завжди надавати.
MyInterface
і викликати його з додатковим параметром: ((MyInterface)obj).TestMethod();
.