No, that is not legal in C#. C# 4 and above support covariance and contravariance of generic interfaces and generic delegates when they are constructed with reference types. So for example, IEnumerable<T>
is covariant, so you could say:
List<Giraffe> giraffes = new List<Giraffe>() { ... };
IEnumerable<Animal> animals = giraffes;
but not
List<Animal> animals = giraffes;
Because a list of animals can have a tiger inserted into it, but a list of giraffes cannot.
Do a web search on covariance and contravariance in C# and you'll find lots of articles on it.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…