[英]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.