당신은 당신이 인터페이스에서 선택적 매개 변수를 지정하면 나는 C # 4의 선택적 매개 변수와 그 눈치 t는, 돈 어떤 구현 클래스의 해당 매개 변수의 선택을해야합니다 :
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
선택적 매개 변수가 이런 식으로 작동하도록 설계된 이유를 아는 사람이 있습니까?
한편으로는 인터페이스에 지정된 기본값을 재정의하는 기능이 정직하지만 유용하지만 인터페이스에 기본값을 지정할 수 있는지 여부는 확실하지 않지만 구현 결정이 필요하다고 생각합니다.
반면에,이 연결 해제는 구체적 클래스와 인터페이스를 항상 호환 적으로 사용할 수있는 것은 아닙니다. 물론 구현에 기본값이 지정된 경우 문제가되지 않지만 구체적인 클래스를 인터페이스로 노출하는 경우 (예를 들어 일부 IOC 프레임 워크를 사용하여 콘크리트 클래스를 주입하는 경우) 실제로는 없습니다. 호출자가 항상 기본값을 제공해야합니다.
MyInterface
하고 선택적 매개 변수를 사용하여 호출 할 수 있습니다 ((MyInterface)obj).TestMethod();
.