显式实现的接口中的可选参数

时间:2012-10-04 15:16:23

标签: c# optional-parameters explicit-interface

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

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

    }
}

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

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

2 个答案:

答案 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.
    }
}