would this be possible? (I don't have vs. 2010, so I can't try it myself, sorry)
public interface IComplexList<out TOutput, in TInput> where TOutput : TInput
{
public IEnumerator<TOutput> GetEnumerator();
public void Add(TInput item);
}
public interface IList<T> : IComplexList<T, T>
{
}
If I get it right, you could use this to actually implement covariance and contravariance in the same interface.
No, you can't. In your example IList<T>
is invariant. IList<T>
would require to declare in
/out
to be covariant/contravariant. It's not possible to do that just by inheriting some interface that is covariant.