public interface IFoo
{
void Foo(bool flag = true);
}
public class Test : IFoo
{
void IFoo.Foo(bool flag = true) //here compiler generates a warning
{
}
}
警告表示将忽略给定的默认值,因为它在不允许它的上下文中使用。
为什么显式实现的接口不允许使用可选参数?
答案 0 :(得分:2)
显式实现的接口方法总是称为,其目标的编译时类型是接口,而不是特定的实现。编译器通过它“知道”它正在调用的方法查看可选参数声明。当只知道目标表达式为Test.Foo
类型时,您如何知道从IFoo
获取参数?
IFoo x = new Test();
x.Foo(); // How would the compiler know to look at the Test.Foo declaration here?
答案 1 :(得分:0)
我会使用方法重载。
public interface IFoo
{
void Foo(bool flag);
void Foo();
}
public class Test : IFoo
{
void Foo() {
this.Foo(true);
}
void Foo(bool flag) {
// Your stuff here.
}
}