Возникли проблемы в интерфейсах C # - PullRequest
0 голосов
/ 03 апреля 2009

Я пытаюсь понять причину этого ... и я действительно изо всех сил пытаюсь понять концепцию того, что я говорю компилятору, когда я использую синтаксис IInterface. Может ли кто-нибудь объяснить это «это то, что происходит»?

Во всяком случае ... мой главный вопрос ....

В чем разница между

public IEnumerable<string> MyMethod() {...}

и

public string MyMethod() : IEnumerable {...}

Зачем вам использовать один над другим?

Ответы [ 3 ]

4 голосов
/ 03 апреля 2009
public string MyMethod() : IEnumerable {...}

Не скомпилируется, вот одно отличие.

Но вы могли бы иметь

public class MyClass : IEnumerable<string> {...}

А потом

public IEnumerable<string> MyMethod() 
{
   MyClass mc = new MyClass();
   return mc;
}
1 голос
/ 03 апреля 2009

Когда вы говорите public IEnumerable<string> MyMethod() {...}, вы объявляете метод, который возвращает некоторый экземпляр, который реализует IEnumerable<string>. Этот экземпляр может быть массивом строк, List<string> или каким-либо другим типом, который вы делаете.

Когда вы говорите public class MyClass : IEnumerable<string> {...}, вы объявляете тип, который реализует IEnumerable<string>. MyMethod может вернуть экземпляр MyClass.

0 голосов
/ 03 апреля 2009

первое - это допустимое объявление метода, если оно живет в классе т.е.

class MyClass 
{
    public IEnumerable<string> MyMethod() {...}
}

второй недопустим C # и не скомпилируется. Это близко к объявлению класса, tho.

class MyClass : IEnumerable<string>
{

}
...