我已在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);
}
}
我有一个仅适用于此接口的实现。
那么,在这种情况下,我的界面是否包含方法?
答案 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");