-
协变,关键字 out(输出):T只能作为成员的返回类型 看编辑器报错情况。
-
逆变,关键字 in(输入):T只能作为成员的参数类型,与协变正好相反。
为什么用 in 和 out?因为协变和逆变的英文太长了。
为什么会有这两个关键字的存在? 为了避免不安全代码的出现。
为什么不安全?看一段表面上没什么问题的代码行。
List<string> s = new List<string>();
List<object> s1 = s;
s1.Add(new object());
string el = s[0];
- 就是这样。