Я пытаюсь понять, почему конкретное поведение в отношении варианта и дженериков в С# не компилируется.
class Matrix<TLine> where TLine : ILine
{
TLine[] _lines;
IReadOnlyList<ILine> Lines { get { return _lines; } } //does not compile
IReadOnlyList<TLine> Lines { get { return _lines; } } //compile
}
Я не понимаю, почему это не работает:
-
_lines
, имеющий типTLine[]
, реализуетIReadOnlyList<TLine>
-
IReadOnlyList<out T>
- это вариантный общий интерфейс, что, насколько я понимаю, означает, что все, что реализуетIReadOnlyList<TLine>
, можно использовать какIReadOnlyList<ILine>
Я чувствую, что это должно быть потому, что ограничение типа не учитывается, но я в этом сомневаюсь.