簡體   English   中英

意外的C#接口實現編譯器錯誤

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM