В C # и VB модификаторы параметров типа используются для выражения дисперсии параметров типа. Например, версия C # выглядит так:
interface Foo<in X, out Y> { }
и версия VB выглядит следующим образом:
Interface Foo(Of In X, Out Y)
End Interface
Поскольку спецификации отклонений в основном ограничивают, где и как можно использовать параметр типа, я склонен думать о них как о дополнительных ограничениях на параметры типа.
Мне просто любопытно, почему они так не представлены. Я имею в виду, почему они представлены в обоих языках как дополнительные модификаторы параметров типа, а не добавлены в список ограничений типа? Если бы это были ограничения типа, версия C # выглядела бы так:
interface Foo<X, Y> where X:in where Y:out { }
и версия VB выглядела бы так:
Interface Foo(Of X As In, Y As Out)
End Interface
Итак, кто-нибудь знает, было ли какое-то обоснование выбора конкретного синтаксиса для выражения дисперсии параметра типа в этих языках, или это было просто случайным?