簡體   English   中英

c#:在接口中定義方法

[英]c#: define method in interface

我在msdn上讀過:

接口不包含方法的實現。

但如果我有代碼:

public interface ITest
{
    void Print(string message);
}

public static void FullPrint(this ITest test, string message)
{
    Console.WriteLine("-------------------");
    test.Print(message);
    Console.WriteLine("-------------------");
} 

static void Main(string[] args)
{
    ITest test = new CTest();
    test.FullPrint("test");
}

public class CTest : ITest
{
    public void Print(string message)
    {
        Console.WriteLine(message);
    }
}

我有一個僅適用於此接口的實現。

那么,在這種情況下,我的界面是否包含方法?

您已聲明了一個方法(給出了它的簽名),但您沒有給它一個實現 接口不能保存實現,基類可以。

在你的情況下,這意味着你必須重寫為:

public /*abstract */ class TestBase
{
    public virtual void Print(string message)
    {
        // implementation
    }
}

FullPrint方法接收實現ITest的某種類型的實例

對於此示例,名為ITest的接口本質上是一個合同定義。 承諾任何實現該接口的類型都將包含該接口的已定義方法和屬性。 這就是接口沒有實現的原因,它代表了一個承諾/合同。

在你的例子中,你做了一個承諾/合同,任何實現ITest類型都將包含方法:

void Print(string message);

您的類型( 未顯示CTest實現該接口。 然后,您可以為CTest實例創建ITest類型的引用。

在您的情況下,您實現了只能在聲明為ITest的類型上使用的Extension方法。 ITest Interface不包含FullPrint方法。 您可以定義基類和實現接口:

public class Test : ITest
{
    public void Print(string message)
    {
    // implementation
    }
}

然后,您可以通過以下方式使用該方法:

ITest variable = new Test();
variable.FullPrint("Hello");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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