static void CovarianceDemo1() { var ls = new List <Sub>(); var lb = new List <Base>(); var b = new Base(); var s = new Sub(); ls.Add(s); lb.Add(b); // ls.Add(b); error lb.Add(s); DoSomething(ls); // DoSomething2(ls); error var fooin = new FooIn <Sub>(); var fooout = new FooOut <Sub>(); IFooIn <Sub> returnValueIn = GetFooIn(); //IFooOut<Sub> returnValueOut = GetFooOut(); // GetFooIn(fooin); illeagal due to covariance rules GetFooOut(fooout); // legal due to covariance rules }
static IFooIn <Base> GetFooIn(IFooIn <Base> f = null) { return(null); }