C#与功能范围的接口问题

Ret*_*rie 4 c# interface

我有一个界面如下:

public interface IInterface
{
    void Open();
    void Open(bool flag);
    void Open(bool flag, bool otherFlag);
}
Run Code Online (Sandbox Code Playgroud)

现在,在实现接口时,我有以下内容:

public class IClass : IInterface
{
    void IInterface.Open()
    {
        Open(false, false);
    }

    void IInterface.Open(bool flag)
    {
        Open(flag, false);
    }

    void IInterface.Open(bool flag, bool otherFlag)
    {
         //Do some stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我遇到的问题是在IClass的前两个函数体中,我无法调用第三个函数.我收到错误:

当前上下文中不存在名称"Open"

好的,所以我明确地实现了界面(由于组织中另一个团队的要求)然后我得到了"开放"上下文问题.我可以从三个open方法中删除显式的IInterface,然后我可以成功编译,即使其他方法(此处未列出)已明确实现,但我不确定这是什么意思.

有没有办法在显式实现接口方法时调用第三个方法?

谢谢!

Ada*_*rth 7

显式实现需要直接使用接口类型的引用,甚至在实现类中:

    void IInterface.Open()
    {
        (this as IInterface).Open(false, false);
    }

    void IInterface.Open(bool flag)
    {
        (this as IInterface).Open(flag, false);
    }
Run Code Online (Sandbox Code Playgroud)

保留显式实现的另一种方法是将调用委托给私有方法:

    private void Open(bool flag, bool otherFlag)
    {
        // Do some stuff.
    }
Run Code Online (Sandbox Code Playgroud)

您的呼叫现在将映射到此方法:

    void IInterface.Open()
    {
        Open(false, false);
    }
    void IInterface.Open(bool flag)
    {
        Open(flag, false);
    }
    void IInterface.Open(bool flag, bool otherFlag)
    {
        Open(true, true);
    }
Run Code Online (Sandbox Code Playgroud)

另请注意,您的类名违反约定,删除I前缀.