发现很少有集中讨论C#可变性限制的中文博文(要么是一大段文字中夹杂很多凌乱的部分),所以写发篇博文,集中讨论,这些限制基本是基于安全考虑,亦或者根本难以实现而产生的。 注:本文不再解释什么是可变性,以及本文所讨论的问题都基于.NET 4至.NET 4.5。所有地方我都力求简洁。 好了,废话不说了,开始吧。 1.可变性只支持引用转换,禁止值类型转换、装箱转换(好吧其实是值类型转换)、和用户自定义类型转换。 任何可变性转换都是一种引用转换,这种转换是类型安全的,他只能操作引用类型,不会对引用的二进制表示产生影响也不会创建新的对象。 2.只有接口和委托可以有可变的类型参