Variance only works for reference-types (or there is an identity conversion). It is not known that TBase
is reference type, unless you add : class
:
public void Foo<TBase>() where TBase : class, IBase
since I could write a:
public struct Evil : IBase {}