.NET泛型编程简介

.NET 泛型编程已经离我们不远了,在微软最近随 SQL Server Yukon Beta1 发行的 .NET Framework 1.2 中就已经有了泛型的影子。虽然现在它还是问题多多,但是相信随着新版 .NET Framework 的正式发行(正式发行时的版本号会是 2.0 ),这些问题会得到解决。因此我们也该为 .NET 泛型编程做些准备了。

.NET 系统是一个单根继承系统,所有的类型都派生自 Object 。我以前一直认为在单根继承系统中用不着泛型。既然所有的东西都可以作为 Object 传递,又何必使用泛型呢?只是增加复杂度而已,除了看起来高深一点,似乎没有别的什么好处了。但是,当两个最著名的单根系统, Java 和 .NET ,都势不可挡地要加入泛型编程时,我不免要重新审视这个问题——为什么一定要泛型编程?

归纳起来,泛型比非泛型具有下面两个优点:

1、 更加安全

在非泛型编程中,虽然所有的东西都可以作为 Object 传递,但是在传递的过程中免不了要进行类型转换。而类型转换在运行时是不安全的。使用泛型编程将可以减少不必要的类型转换,从而提高安全性。

2、 效率更高

在非泛型编程中,将简单类型作为 Object 传递时会引起 Boxing 和 Unboxing 操作,这两个过程都是具有很大开销的。使用泛型编程就不必进行 Boxing 和 Unboxing 操作了。

.NET 泛型具有很好的二进制重用性。这一点得益于 .NET 将泛型内建在 CLR 之中。 C++ 泛型和评估中 Java 泛型所依靠的是它们各自的编译器所提供的特性,编译器在编译泛型代码时将确切的类型展开,这就难免会出现代码膨胀的问题。而 .NET 的泛型代码是在运行时由 JIT 即时编译的,这样 CLR 就可以为不同类型重用大部分的即时编译代码了。

下面两篇文章详细地介绍了 .NET 中的泛型编程:

Introducing Generics in the CLR

More on Generics in the CLR

Published At
Categories with Web编程
Tagged with
comments powered by Disqus