Вопрос

IEnumerable<T>, IComparable<T> и еще несколько теперь имеют варианты типа. IList<T>, ICollection<T> а многие другие нет.Почему?

Это было полезно?

Решение

.NET Framework 4.0 представляет безопасный ко/контравариация. IList<T> и ICollection<T> иметь T как во входном, так и в выходном положении, в то время как IEnumerable<T> имеет T только в выходных положениях и IComparable<T> имеет T только во входных позициях.

Предполагать IList<T> поддерживаемая вариация типа:

static void FailingMethod(IList<object> list) {
    list[0] = 5;
}

static void Test() {
    var a = new List<string>();
    a[0] = "hello";
    FailingMethod(a); // if it was variant, this method call would be unsafe
}

Другие советы

У Андерса Хейлсеберга есть краткое, но осветительное обсуждение, которое описывает Co/Contravariance в его выступлении «будущее C#». Его дискуссия о ковариации и противоположности начинается через 50 минут и 17 секунд до презентации.

http://channel9.msdn.com/pdc2008/TL16/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top