我有以下界面
interface ITest
{
void TestVoid();
}
class A : ITest
{
public void ITest.TestVoid() //will not work
{
Conole.WriteLine("Done");
}
public void TestVoid() //without name of interface, it works
{
Conole.WriteLine("Done");
}
}
第二个问题:接口是否仅包含成员的签名但从未实现,这是否正确?
答案 0 :(得分:1)
第一种方法是显式实现。这允许您实现接口,而不在您的类之外显示此方法。此外,您无法在显式实现上使用可见性修饰符。
第二种方法是正常(隐式)实现,您可以在其中实现接口AND create public方法。
更多:Implicit and Explicit Interface Implementations,C#: Interfaces - Implicit and Explicit implementation
对于你的第二个问题:这是界面是什么。它只告诉您,对象上有哪些方法,属性或事件可用。不是它们的实施方式。
答案 1 :(得分:0)
我回答你的第二个问题:是的,这是正确的 如果您实现该接口,接口将声明您必须使用的一种合同 如果实现这些接口,接口只需(并且仅)声明您必须在类中编写的内容。
答案 2 :(得分:0)
您需要实现类似的界面。
class A : ITest {
}.
您可以使用ITest明确实施ITests方法。前缀
或隐含地作为公共方法
如果它们是明确的,那么访问它们的方式就是这样。
ITest a = new A();
否则。
A =新A();
接口永远不会有实现,
类方法总是会做,除非它被标记为抽象 - 然后派生类具有实现
答案 3 :(得分:0)
第一个叫做显式实现,它会像这样工作:
interface ITest
{
void TestVoid();
}
class A : ITest
{
public static void Main()
{
A a1 = new A();
ITest a2 = new A();
a1.TestVoid(); // won't work
a2.TestVoid(); // will work
}
public void ITest.TestVoid()
{
Conole.WriteLine("Done");
}
}
接口不能包含实现,只能包含签名。
答案 4 :(得分:0)
第二个没问题,所以你可以使用它。
答案 5 :(得分:0)
第一个叫做Explicit实现,不应该有任何访问说明符,Explicit接口也可以用来隐藏类开发人员认为私有的接口的细节。 第二个是隐式实现。它必须具有public作为访问说明符。
此链接对理解它非常有帮助。 http://blogs.msdn.com/b/mhop/archive/2006/12/12/implicit-and-explicit-interface-implementations.aspx