Интерфейсная функция C # - PullRequest
2 голосов
/ 14 июня 2010

У меня есть функция, которая реализует интерфейс.как то так:

string IMyInterface.MyFunction()
{
   do something;
}

Эта функция доступна за пределами моего класса.Все работает отлично.Теперь мне также нужно вызвать эту функцию из другой МЕСТНОЙ непубличной функции.как это:

void Func2()
{
  string s;
  s = MyFunction();
}

Проблема в том, что я получаю эту ошибку: «имя MyFunction не существует в текущем локальном контексте»

Любая помощь будет оценена.

TY.

Ответы [ 4 ]

7 голосов
/ 14 июня 2010

Вы явно реализовали метод интерфейса.Приведите «это» к интерфейсу, и вы там:

void Func2()
{
    string s = ((IMyInterface)this).MyFunction();  
}
4 голосов
/ 14 июня 2010

Это явно реализовано . Вы можете вызвать его только по ссылке типа IMyInterface. Чтобы вызвать это внутренне, вам нужно разыграть this.

s = ((IMyInterface)this).MyFunction();

Подумайте, чтобы реализовать это неявно, явные реализации сложны, вам нужна веская причина, чтобы использовать это.

2 голосов
/ 14 июня 2010

Как уже упоминалось другими авторами, вы реализовали интерфейс явно. Другой вариант - реализовать это так:

string MyFunction()
{
   do something;
}

По моему опыту, вы явно реализуете интерфейс только тогда, когда беспокоитесь о том, что имена функций в нескольких интерфейсах будут конфликтовать, но они имеют разные реализации.

0 голосов
/ 14 июня 2010

Я часто использую вариант следующего шаблона с явными интерфейсами:

string IMyInterface.MyFunction()
{
    _myPrivateFunction();
}

string _myPrivateFunction()
{
    //Do Stuff...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...