3
public interface IFoo
{
    void Foo(bool flag = true);
}

public class Test : IFoo
{
    void IFoo.Foo(bool flag = true) //here compiler generates a warning
    {

    }
}

警告说给定的默认值将被忽略,因为它在不允许的上下文中使用。

为什么显式实现的接口不允许可选参数?

4

2 回答 2

2

显式实现的接口方法总是用编译时类型是接口的目标调用,而不是特定的实现。编译器查看它“知道”它正在调用的方法声明的可选参数。Test.Foo当它只知道目标表达式为 type 时,您如何期望它知道从中获取参数IFoo

IFoo x = new Test();
x.Foo(); // How would the compiler know to look at the Test.Foo declaration here?
于 2012-10-04T15:18:37.827 回答
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.
    }
}
于 2012-10-04T15:19:00.370 回答