簡體   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