public interface IFoo
{
void Foo(bool flag = true);
}
public class Test : IFoo
{
void IFoo.Foo(bool flag = true) //here compiler generates a warning
{
}
}
警告说给定的默认值将被忽略,因为它在不允许的上下文中使用。
为什么显式实现的接口不允许可选参数?
public interface IFoo
{
void Foo(bool flag = true);
}
public class Test : IFoo
{
void IFoo.Foo(bool flag = true) //here compiler generates a warning
{
}
}
警告说给定的默认值将被忽略,因为它在不允许的上下文中使用。
为什么显式实现的接口不允许可选参数?
显式实现的接口方法总是用编译时类型是接口的目标调用,而不是特定的实现。编译器查看它“知道”它正在调用的方法声明的可选参数。Test.Foo
当它只知道目标表达式为 type 时,您如何期望它知道从中获取参数IFoo
?
IFoo x = new Test();
x.Foo(); // How would the compiler know to look at the Test.Foo declaration here?
我会使用方法重载。
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.
}
}