В чем разница между ковариацией и повышением, или, точнее, почему им присваиваются разные имена?
Я видел следующий пример, называемый "повышением":
string s = "hello";
object o = s; //upcast to 'string' to 'object'
В то время как следующее, которое я видел, называется "ковариация":
string[] s = new string[100];
object[] o = s;
IEnumerable<string> ies = new List<string>();
IEnumerable<object> ieo = ies;
Теперь, к моему неподготовленному взгляду, ковариация, похоже, такая же, как и повышение, за исключением того, что она относится к кастингу коллекций. (И подобное утверждение может быть сделано относительно контравариантности и понижения).
Это действительно так просто?