Quelle est la différence entre la covariance et l'upcasting, ou, plus précisément, pourquoi sont-ils donné des noms différents?
J'ai vu l'exemple suivant, dénommé "upcasting':
string s = "hello";
object o = s; //upcast to 'string' to 'object'
Attendu que le suivant, j'ai vu appelée "la covariance':
string[] s = new string[100];
object[] o = s;
IEnumerable<string> ies = new List<string>();
IEnumerable<object> ieo = ies;
Maintenant, à mon œil non averti, la covariance semble être le même que upcasting, sauf qu'il se réfère à la coulée des collections. (Et d'une déclaration similaire peut être faite concernant la contravariance et de passer).
Est-ce vraiment si simple?