Как язык c# предотвращает ковариантность универсальных методов, если они не содержат методов, требующих T в качестве входных данных?

я читал об изменениях, которые принесет .NET4.5, и в этом сообщении в блоге я наткнулся на нечто, чего не знал и не понимал.

Говоря о реализации коллекций только для чтения, Иммо Ландвертговорит:

К сожалению, наша система типов не позволяет создавать ковариантные типы T, если только у нее нет методов, принимающих T в качестве входных данных. . Поэтому мы не можем добавить метод IndexOf в IReadOnlyList.Мы считаем, что это небольшая жертва по сравнению с отсутствием поддержки ковариации.

Судя по моему явно ограниченному пониманию, кажется, что он говорит, что для того, чтобы мы могли вызывать метод, который требует IReadOnlyListпутем передачи IReadOnlyList, у нас не может быть метода IReadOnlyList.IndexOf(T someShape).

Я не понимаю, как система типов могла бы этому помешать. Кто-нибудь может объяснить?

9
задан Jason Ridge 18 June 2012 в 12:05
поделиться