我有一个界面如下:
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,然后我可以成功编译,即使其他方法(此处未列出)已明确实现,但我不确定这是什么意思.
有没有办法在显式实现接口方法时调用第三个方法?
谢谢!
显式实现需要直接使用接口类型的引用,甚至在实现类中:
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前缀.