C#2.0 generic 的资料已经出来很长时间了,相信大家对它也有了很多的了解。
语法的简洁,以及where的限定等等,使它看起来比c++的模板有了一些更优雅的地方。然而,由于c#编译器本身的限制,它大概还是无法胜任类似于Loki之类的泛型编程方法。最大的限制在于,类不能从它的模板类继承,类似于以下代码
public class Foo<T> : T
{
![](/Images/OutliningIndicators/InBlock.gif)
这在C#2.0是无法编译的。而这样的技巧在c++ generic programming中是policy的基本用法。
另外一项在c++ generic progrmming中重要的技术是partial specialization。这一点在c#2.0里一样没有得到支持,最多只能从函数重载中获得类似的部分功能。
不过总体来说,c#2.0的泛型比java1.5的会略微舒服一点,尤其在runtime reflection的时候,可以获得代码的完整的泛型信息,这应该是一大优势。
语法的简洁,以及where的限定等等,使它看起来比c++的模板有了一些更优雅的地方。然而,由于c#编译器本身的限制,它大概还是无法胜任类似于Loki之类的泛型编程方法。最大的限制在于,类不能从它的模板类继承,类似于以下代码
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
这在C#2.0是无法编译的。而这样的技巧在c++ generic programming中是policy的基本用法。
另外一项在c++ generic progrmming中重要的技术是partial specialization。这一点在c#2.0里一样没有得到支持,最多只能从函数重载中获得类似的部分功能。
不过总体来说,c#2.0的泛型比java1.5的会略微舒服一点,尤其在runtime reflection的时候,可以获得代码的完整的泛型信息,这应该是一大优势。