[英]Unexpected c# interface implementation compiler error
我今天才遇到这种奇怪的行为:
interface IFooBar
{
void Foo();
void Bar();
}
class FooBar : IFooBar
{
void IFooBar.Foo()
{
}
void IFooBar.Bar()
{
this.Foo();
}
}
这行this.Foo(); 引发编译器错误
'MyProject.FooBar'不包含'Foo'的定义,并且找不到扩展方法'Foo'接受类型为'MyProject.FooBar'的第一个参数(您是否缺少using指令或程序集引用?)
如果我选择公共方法而不是interface.method声明样式,则代码将编译:
class FooBarOk : IFooBar
{
public void Foo()
{
}
public void Bar()
{
this.Foo();
}
}
我想了解为什么会出现此错误,以及如何使用interface.method表示法解决该错误。
您是否尝试过在代码中使用接口语法?
((IFooBar)this).Foo ();
我希望这是因为实现实际上是隐藏的,确保您必须将其IFooBar
转换为IFooBar
才能使用。
要变通解决,您可以编写:
((IFooBar)this).Foo();
查看Explicit Interface Implementation Tutorial,以回答为什么this.Foo()
不起作用。
这称为显式接口实现。 它使您可以实现接口,而无需公开公开这些方法。 例如,您可以实现IDisposable,但提供一个公共Close()方法,这对于您的api用户可能更有意义。 在内部,IDisposable.Dispose()方法将调用您的Close方法。
interface IFooBar
{
void Foo();
void Bar();
}
class FooBar : IFooBar
{
void IFooBar.Foo()
{
}
void IFooBar.Bar()
{
((IFooBar)this).Foo();
}
}
是您调用Foo方法的一种方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.