Реализация двух интерфейсов или нет? - PullRequest
1 голос
/ 29 октября 2009

Я пишу класс, который возвращает как DataTable, так и IEnumerable. Я не могу определить методы интерфейса точно так же, за исключением типа возврата. Итак, я хотел бы создать этот интерфейс (очевидно, он не компилируется):

interface IMyInterface
    {
        DataTable GetResults();
        IEnumerable<string> GetResults();
    }

Итак, как бы вы структурировали эти две функции, переименовали их, несколько интерфейсов, параметры?

Мне просто любопытно, как вы, ребята, справитесь, ты ...

Ответы [ 5 ]

14 голосов
/ 29 октября 2009

Я бы сделал это:

interface IMyInterface
{
    DataTable GetResultsAsTable();
    IEnumerable<string> GetResultsAsSequence();
}

Очевидно, что C # не позволяет использовать два метода, сигнатуры которых отличаются только типом возвращаемого значения (что интересно, CLR делает это это позволяет). Имея это в виду, я думаю, что было бы лучше дать методам общие префиксы и добавить суффикс, указывающий тип возвращаемого значения.

2 голосов
/ 29 октября 2009

Вы можете сделать это?

interface IMyInterface    { 
   DataTable GetDTResults();        
   IEnumerable<string> GetIEResults();    
}
1 голос
/ 29 октября 2009

Вы можете сохранить то же имя метода, используя параметр out:

interface IMyInterface
{
     void GetResults(out DataTable results);
     void GetResults(out IEnumerable<string> results);
}
0 голосов
/ 29 октября 2009

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

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

0 голосов
/ 29 октября 2009

Я бы переименовал первый метод:

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