Разница между ковариацией и апкастингом

В чем разница между ковариацией и апкастингом, или, более конкретно, почему им даны разные имена?

Я видел следующий пример, называемый «апкастингом»:

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;

На мой неопытный взгляд, ковариация кажется такой же, как апкастинг, за исключением того, что она относится к приведению коллекций. (Аналогичное утверждение можно сделать относительно контравариантности и понижающего преобразования.)

Неужели это так просто?

60
задан Peter Mortensen 15 July 2011 в 21:58
поделиться