Я пытаюсь понять, почему конкретное поведение в отношении варианта и дженериков в С# не компилируется.
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>
Я чувствую, что это должно быть потому, что ограничение типа не учитывается, но я в этом сомневаюсь.