IEnumerable<T>
インターフェースの例:
public interface IEnumerable<out T> : IEnumerable
{
IEnumerator<T> GetEnumerator();
}
このインターフェイスでは、ジェネリック型はインターフェイス メソッドの戻り値の型としてのみ使用され、メソッド引数の型としては使用されないため、共変になる可能性があります。これを考えると、コンパイラは理論的にインターフェイスからの差異を推測できませんか? 可能であれば、C# で co/contravariance キーワードを明示的に設定する必要があるのはなぜですか。
更新:Jon Skeet が言及したように、この質問はサブ質問になります。
コンパイラは、現在のジェネリック型とそのすべての基本型の中でどのように使用されているかによって、ジェネリック型の相互/反変性を推測できますか?
たとえば、.NET Framework 4.0 のジェネリック インターフェイス パラメーターのうち、あいまいさなしに共変/反変として自動的にマークできるものはいくつありますか? 約70%、80%、90%、または100%?
可能であれば、デフォルトでジェネリック型に共/反変性を適用する必要がありますか? 少なくとも、型の使用法から共変/反変を分析および推測できる型に対して。