c#:在接口中定义方法

时间:2017-02-28 11:00:48

标签: c# 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);
    }
}

我有一个仅适用于此接口的实现。

那么,在这种情况下,我的界面是否包含方法?

3 个答案:

答案 0 :(得分:1)

你已经声明了一个方法(给出了它的签名),但你没有给它一个实现。接口不能保存实现,基类可以。

在你的情况下,这意味着你必须改写为:

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

答案 1 :(得分:1)

方法FullPrint 接收实现ITest的某种类型的实例

一个接口,对于这个例子,名为ITest的接口本质上是一个合同定义。承诺任何实现该接口的类型都将包含该接口的已定义方法和属性。这就是接口没有实现的原因,它代表了一个承诺/合同。

再次在您的示例中,您创建一个承诺/合同,任何实现ITest的类型都将包含方法:

void Print(string message);

您的类型(未显示CTest实现了该接口。然后,您为ITest的实例创建CTest类型的引用。

答案 2 :(得分:1)

在您的情况下,您实现了只能在声明为ITest的类型上使用的Extension方法。 ITest Interface不包含FullPrint方法。 您可以定义基类和实现接口:

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

然后,您可以通过以下方式使用该方法:

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