Ковариантность по сравнению с контравариантностью относительно наследования классов

Подстановочный знак в MS Access является *, а не %:

SELECT FirstName, LastName
FROM Customers
WHERE FirstName LIKE 'A*';
5
задан einpoklum - reinstate Monica 29 July 2013 в 18:04
поделиться

2 ответа

У Вас есть он назад. Можно добавить Слона к массиву Животных, потому что это - Животное, и он, как гарантируют, будет иметь все методы, которые Животное обязано иметь. Вы не можете добавить Животное к массиву Слона, потому что это не имеет всех методов, которые Слон обязан иметь.

Статья Wikipedia о ковариантности и контравариантности имеет хорошее объяснение этого:

В системе типов языка программирования оператор от типов до типов является ковариантным, если это сохраняет упорядочивание, ≤, типов, который заказывает типы от более определенных до большего количества универсальных; это - контравариант, если это инвертирует это упорядочивание. Если ни один из них не применяется, оператор является инвариантным. Эти условия прибывают из теории категорий.

Кроме того, Вы сказали, что Слон типа был "больше", и дело обстоит не так. Животное типа "больше" в том смысле, что оно включает более определенные типы, такие как Слон, Жираф и Лев.

9
ответ дан 13 December 2019 в 19:38
поделиться

Взгляните на этот обзор ковариантности и контравариантности в C# 4.0 и посмотрите, помогает ли это:

http://blogs.msdn.com/charlie/archive/2008/10/27/linq-farm-covariance-and-contravariance-in-visual-studio-2010.aspx

2
ответ дан 13 December 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: