If you have an Interface IFoo and a class Bar : IFoo, why can you do the following:
IFoo
Bar : IFoo
List foo = new List();
It is to do with the creation of the List, you have specified the T to be IFoo therefore you cannot instantiate it as a Bar since they are different types, even though Bar supports IFoo.