2011-02-07 12 views

Odpowiedz

2

Oddziela interfejs od implementacji. Dla osoby dzwoniącej nie ma znaczenia, jak zaimplementować obiekt wynikowy, więc używanie interfejsów zmniejsza sprzężenie. Jeśli zwrócisz IList, możesz w dowolnej chwili przełączyć się na inną implementację bez przerywania kodu dzwoniącego.

4

Jeśli wystawiając swoją klasę przez biblioteki, które inni będą korzystać, generalnie chcą narażać go za pośrednictwem interfejsów zamiast betonowych wdrożeń. Pomoże to, jeśli zdecydujesz się zmienić implementację klasy później, aby użyć innej klasy betonu. W takim przypadku użytkownicy biblioteki nie będą musieli aktualizować swojego kodu , ponieważ interfejs się nie zmienia.

Jeśli używasz tego tylko wewnętrznie, możesz nie przejmować się tak bardzo, a używanie przy użyciu listy może być OK.

Czytaj rozwiązanie tej kwestii: Why is it considered bad to expose List<T>?

+0

Czasami idziesz daleko w administracji stare odpowiedzi ... – Scoregraphic

-2

Jeśli wrócisz jak tylko liście. następnie osoba wywołująca twoją funkcję musi umieścić powrót w instancji listy klas.

Gdy zwrócisz IList, wywołujący może umieścić go w instancji dowolnej implementacji tego interfejsu. Załóżmy, że program wywołujący wykonał implementację, która obsługuje sortowanie funky, a może wykonali implementację, która bezpośrednio mapuje listę do tabeli bazy danych.

Chodzi o to, aby odbiornik mógł implementować listy.

+1

To po prostu nie tak. Jeśli zwrócisz listę, odbiorca ma swobodę akceptowania jej jako listy lub ilisty. Jeśli zwrócisz IList, że wolność zniknęła. – Foxfire

1

Nie można zwrócić wartości IList - należy zwrócić implementację tego interfejsu (tj. List). Oczywiście zwrot "listy" spełni deklarację Twojej metody zwrotu IList ponieważ List implementuje List implementuje .

Zwykle najlepszym rozwiązaniem jest, aby zaakceptować parametry najbardziej rodzajowego rodzaju i powrócić do najbardziej konkretny. Jednak konwencjonalni programiści zwykle nie chcą wiązać się z implementacją List i zwykle zwracają interfejs IList. Możesz zwrócić IEnumerable, jeśli nie chcesz, aby osoby dzwoniące zmieniły tablicę (zadzwoń pod numer .AsReadOnly() w swoim numerze IList).

0

Zwrócenie interfejsu pozwala później zmienić implementację, a tym samym zmniejszyć sprzężenie.

Jednak przy POWWiązaniu obiektu zazwyczaj nie ma to znaczenia praktycznego. Jest to o wiele bardziej istotne przy przyjmowaniu obiektów (np. Jako parametr funkcyjny).

Powiązane problemy