Variant interfaces C# with Example
Interfaces may have variant type parameters. interface IEnumerable { // ... } interface IComparer { // ... } but classes and structures may not class BadClass // not allowed { } struct BadStruct // not allowed { } nor do generic method declarations class MyClass { public T Bad(T1 t1) // not allowed { // ... } } The example below shows multiple variance declarations on the same interface interface IFoo // T1 : Contravariant type // T2 : Covariant type // T3 : Invariant type { // ... } IFoo foo1 = /* ... */; IFoo foo2 = foo1; // IFoo is a subtype of IFoo