繁体   English   中英

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

[英]How to have public methods implemented from 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");
   }
}

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

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

第二种方法是正常(隐式)实现,其中实现接口AND创建公共方法。

更多: 隐式和显式接口实现C#:接口 - 隐式和显式实现

对于你的第二个问题:这是什么界面。 它只告诉您,对象上有哪些方法,属性或事件可用。 不是他们如何实施。

第一个叫做Explicit实现,不应该有任何访问说明符,Explicit接口也可以用来隐藏类开发人员认为私有的接口的细节。 第二个是隐式实现。 它必须具有public作为访问说明符。

这个链接非常有助于理解它。 http://blogs.msdn.com/b/mhop/archive/2006/12/12/implicit-and-explicit-interface-implementations.aspx

我回答你的第二个问题:是的,这是正确的。
如果您实现该接口,接口将声明您必须使用的一种合同
如果实现这些接口,接口只需(并且仅)声明您必须在类中编写的内容。

你需要实现这样的界面。

class A : ITest {
}.   

您可以使用ITest明确实现ITests方法。 字首

或者隐含地作为公共方法

如果它们是明确的,那么访问它们的方式就是这样。

ITest a = new A();

除此以外。
A =新A();

接口永远不会有实现,
类方法总是会做,除非它被标记为抽象 - 然后派生类具有实现

第一个叫做显式实现,它会像这样工作:

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

接口不能包含实现,只能包含签名。

第二个是好的,所以你可以使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM