Umieszczenie kolekcji obiektów w jednej bardziej ogólnej liście.

0

Zakładamy, że klasa Duck dziedziczy po Bird.
Czy mógłby mi ktoś wyjaśnić jaka jest róznica między tymi linijkami:

 
List<Duck> ducks = new List <Duck>(){//inicjalizacja obiektów};
IEnumerable<Bird> upcastDucks = ducks;
List<Bird> birds = new List<Bird>();
birds.Add(new Bird());
birds.AddRange(upcastDucks);

To samo tylko bez typu IEnumerable<Bird>

List<Duck> ducks = new List <Duck>(){//inicjalizacja obiektów};
List<Bird> birds = new List<Bird>();
birds.Add(new Bird());
birds.AddRange(upcastDucks);

Nie rozumiem dlaczego miałbym używać referencji typu: IEnumerable<Bird> upcastDucks = ducks;

1

Użycie interfejsu pozwala na zastosowanie jakiegokolwiek rodzaju kolekcji, a nie konkretnie kolekcji typu List<T>. Każda kolekcja, która dziedziczy po IEnumerable może być nosicielem Bird. W tym dolnym przypadku tylko kolekcja klasy List.

Przykład:

IList<Class> col = new ObservableCollection<Class>();
IList<Class> col = new List<Class>();
IList<Class> col = new LinkedList<Class>();
IList<Class> col = new YourCustomCollectionClass<Class>();

Nie rozumiem dlaczego miałbym używać referencji typu: IEnumerable<bird> upcastDucks = ducks;

I nie musisz jej używać :) Interfejs pozwala Ci zastosować warstwę abstrakcji przy dopasowaniu kolekcji. Jeżeli jesteś absolutnie pewny, że nigdy nie zmieni się rodzaj kolekcji i zawsze będzie to List<T> to możesz sobie interfejs podarować :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1