Как реализовать публичные методы из интерфейса? - PullRequest
0 голосов
/ 17 апреля 2011

У меня следующий интерфейс

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 ]

1 голос
/ 17 апреля 2011

Первый метод - явная реализация.Это позволяет вам реализовать интерфейс, не показывая этот метод за пределами вашего класса.Кроме того, вы не можете иметь модификатор видимости при явной реализации.

Второй метод - это нормальная (неявная) реализация, в которой вы реализуете интерфейс И создаете открытый метод.

Подробнее: Неявный и явный интерфейсРеализации , C #: Интерфейсы - неявная и явная реализация

Для вашего второго вопроса: Это точно, что такое интерфейс.Он только говорит вам, какой метод, свойства или события доступны на объекте.Не так, как они реализованы.

0 голосов
/ 29 мая 2013

Первый называется явной реализацией и не должен иметь какого-либо спецификатора доступа. Явные интерфейсы также могут использоваться для скрытия деталей интерфейса, который разработчик класса считает закрытым.Второй - неявная реализация.Он должен иметь public как спецификатор доступа.

эта ссылка действительно полезна для понимания.http://blogs.msdn.com/b/mhop/archive/2006/12/12/implicit-and-explicit-interface-implementations.aspx

0 голосов
/ 17 апреля 2011

Второй в порядке, так что вы можете использовать его.

0 голосов
/ 17 апреля 2011

Первая называется явной реализацией, она будет работать так:

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

Интерфейс не может содержать реализации, только подписи.

0 голосов
/ 17 апреля 2011

Вам нужно реализовать интерфейс вроде.

class A : ITest {
}.   

Вы можете явно реализовать методы ITests с помощью ITest. Префикс

Или неявно как публичные методы

Если они явные, то способ доступа к ним как таковой.

ITest a = new A();

В противном случае.
A a = новый A ();

Интерфейс никогда не имеет реализации,
Метод класса всегда делает, если он не помечен как абстрактный - тогда у производного класса есть реализация

0 голосов
/ 17 апреля 2011

Я отвечаю на ваш второй вопрос: да, это правильно.
Интерфейс объявляет своего рода контракт , с которым вы должны работать, если реализуете этот интерфейс.
Интерфейс просто (и только) объявляет то, что вы ДОЛЖНЫ написать в своих классах, если вы реализуете эти интерфейсы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...