如何从界面实现公共方法?

时间:2011-04-17 12:26:23

标签: c# .net inheritance interface

我有以下界面

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");
   }
}

第二个问题:接口是否仅包含成员的签名但从未实现,这是否正确?

6 个答案:

答案 0 :(得分:1)

第一种方法是显式实现。这允许您实现接口,而不在您的类之外显示此方法。此外,您无法在显式实现上使用可见性修饰符。

第二种方法是正常(隐式)实现,您可以在其中实现接口AND create public方法。

更多:Implicit and Explicit Interface ImplementationsC#: 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