两句话看懂 C#泛型约束的协变和逆变

  • 协变,关键字 out(输出):T只能作为成员的返回类型 看编辑器报错情况。


    image.png
  • 逆变,关键字 in(输入):T只能作为成员的参数类型,与协变正好相反。


    image.png
  • 为什么用 in 和 out?因为协变和逆变的英文太长了。

  • 为什么会有这两个关键字的存在? 为了避免不安全代码的出现。

  • 为什么不安全?看一段表面上没什么问题的代码行。

 List<string> s = new List<string>();
 List<object> s1 = s; 
 s1.Add(new object());
 string el = s[0];
  • 就是这样。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容