C# 4.0: .NET Framework 4 中的新 C# 功能
2010-09-30 22:47:01 来源:WEB开发网Manager → Employee
IComparable<Manager> ← IComparable<Employee>
到现在为止,可以很容易地总结语言特性:在您定义类型参数时可以添加 in 或 out 关键字,从而为您提供额外的自由转换。不过,还是有一些限制。
首先,这种方式仅适用于泛型接口和委托。您不能以这种方式为类或结构声明泛型参数。造成这种限制的一个简单原因是:委托很像只拥有一个方法的接口,而由于字段的存在,无论如何都不能将类看作某种形式的接口。您可以将泛型类的任何字段当作既是输入又是输出,具体取决于您是对它执行写入还是读取操作。如果这些字段涉及类型参数,则这些参数既不能协变也不能逆变。
其次,如果某个接口或委托具有协变或逆变类型参数,则只有在该接口使用(而不是其定义)中,类型参数是引用类型时,才允许对该类型执行新的转换。例如,由于 int 是值类型,因此即使看起来应该能行,但是 IEnumerator<int> 事实上不能转换为 IEnumerator <object>:
IEnumerator <int> IEnumerator <object>
出现这种行为的原因是转换必须保留类型的表现形式。如果允许执行 int 到 object 的转换,就不可能调用结果的 Current 属性,因为值类型 int 与对象引用在堆栈中所具有的表现形式是不一样的。但所有引用类型在堆栈中都具有相同的表现形式,因此只有在类型参数为引用类型时,才能实现这些额外的转换。
大多数 C# 开发人员很可能会开心地使用这项新的语言功能,因为在使用 .NET Framework 提供的某些类型(IEnumerable<T>、IComparable<T>、Func<T>、 Action<T> 等等)时,他们会获得更多框架类型的转换,而且编译器错误也会更少。事实上,只要设计的库包含泛型接口和委托,设计人员就可以根据需要自由使用新的 in 和 out 类型参数,使其用户能够更轻松地使用他们设计的库。
- ››功能强更实用 Win7库变为“计算机”
- ››功能最全!网管必备子网划分计算工具!
- ››Netpas加速 让非电信宽带用户流畅上网
- ››net中fckediter的图片上传时候点击\浏览服务器\出...
- ››Netmsg局域网聊天程序
- ››NetAirus指控苹果iPhone侵犯其专利
- ››Netflix 在线影视播放程序将登陆 iPhone
- ››Net中各种不同的对象创建方式的速度差异
- ››NetNewsWire 功能简单 界面快速 Reader 浏览器
- ››功能完整的 Google Reader 离线浏览器 Byline 介绍...
- ››NET-使用Js调用WebService
- ››Net 应用程序如何在32位操作系统下申请超过2G的内...
更多精彩
赞助商链接