【问题标题】:How to have public methods implemented from interface?如何从接口实现公共方法?
【发布时间】:2011-04-17 12:26:23
【问题描述】:

我有以下界面

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

第二个问题:接口只包含成员签名但不包含实现是否正确?

【问题讨论】:

  • 关于问题的标题,如果您希望提供默认实现,请查看使用抽象类。两者之间存在差异,因此您需要研究哪个适合您的需求。或者,this question 使用抽象类和接口。

标签: c# .net inheritance interface


【解决方案1】:

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

第二种方法是普通(隐式)实现,您可以在其中实现接口并创建公共方法。

更多:Implicit and Explicit Interface Implementations, C#: Interfaces - Implicit and Explicit implementation

对于您的第二个问题:这正是界面的含义。它只告诉您对象上可用的方法、属性或事件。不是它们是如何实现的。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      第一个称为显式实现,它的工作方式如下:

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

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

      【讨论】:

      • 谢谢。如果我使用 public 修饰符实现该方法并省略接口名称(我的示例中的第二个示例)怎么办?它显然有效,但我不知道它是否可以。
      【解决方案4】:

      第二个没问题,你可以用它。

      【讨论】:

        【解决方案5】:

        你需要像这样实现接口。

        class A : ITest {
        }.   
        

        您可以使用 ITest 显式实现 ITests 方法。前缀

        或者隐式地作为公共方法

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

        ITest a = new A();
        

        否则。
        A a = new A();

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

        【讨论】:

        • 已编辑并添加,谢谢。不过确实没有解决问题,就是忘记写了。
        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-07
          • 2014-12-03
          • 1970-01-01
          • 2017-06-08
          • 2011-08-24
          • 2016-11-21
          • 1970-01-01
          • 2023-03-13
          相关资源
          最近更新 更多