Ik begrijp de IList<T> niet in combinatie met het casten naar interfaces.
Een simpel voorbeeld:
Met "normale" inheritance kan ik simpelweg het volgende doen:
En vervolgens kan ik van een Person weer een IPerson maken
Nu merk ik dat bij IList<T> dit niet werkt en ik begrijp niet goed waarom niet.
Waarom kan ik een IList<Person> niet gewoon naar een IList<IPerson> converteren?
Het rare is dat als ik de elementen benader en cast naar IPerson ze gewoon gecasted kunnen worden:
Heeft iemand enig idee wat ik over het hoofd zie? Het lijkt er op alsof de IList<T> / List<T> niet aan de inheritance specificatie voldoen?
Een simpel voorbeeld:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public interface IPerson { string Name { get; set; } } public class Person : IPerson { private string name = ""; public string Name { get { return name; } } } |
Met "normale" inheritance kan ik simpelweg het volgende doen:
C#:
1
2
| IPerson person1 = new Person(); // Werkt omdat Person is afgeleid van IPerson |
En vervolgens kan ik van een Person weer een IPerson maken
C#:
1
2
3
| Person person2 = new Person(); IPerson casted = person2 as IPerson; // Werkt omdat Person is afgeleid van IPerson |
Nu merk ik dat bij IList<T> dit niet werkt en ik begrijp niet goed waarom niet.
C#:
1
2
3
| IList<Person> persons = new List<Person>(); IList<IPerson> casted = persons as IList<IPerson>; // casted is NULL |
Waarom kan ik een IList<Person> niet gewoon naar een IList<IPerson> converteren?
Het rare is dat als ik de elementen benader en cast naar IPerson ze gewoon gecasted kunnen worden:
C#:
1
2
| IPerson person = persons[0] as IPerson; // Werkt perfect |
Heeft iemand enig idee wat ik over het hoofd zie? Het lijkt er op alsof de IList<T> / List<T> niet aan de inheritance specificatie voldoen?
PSN: Norfirin