型, 也就是基于对象的编程范式。 (当然, .NET框架也是支持值类型的) C#.net的泛型类型替换是在运行时执行的。对于引用类型(在堆内存中创建实例的类型),它 使用类型强制转换,而不是C++模板的源代码生成来实现参数化类型。 对于值类型,则使用类似于C++模板的MSIL中间代码生成机制实现。 顺便提一下,java的泛型实现和C#的机制类似。也是使用强制类型转换实现。而且,Java 中没有值类型, 也不能对基本类型进行泛型操作, 因此没有C#和C++中的源代码扩张问题。 但是,老实说,java的泛型机制确实太弱了! C#语言首选的是面向对象编程范式。C#也可以使用泛型支持的基于对象的编程范式。
使用值类型,对于用惯面向对象编程范式的C#和java程序员来说有一定的难度。而且,提 升的效率也并不很高。
同时,在语法层面上,C# 泛型是实现参数化类型的更简单方法,不具有 C++ 模板的复杂 性。此外,C# 并不尝试提供 C++ 模板所提供的所有功能。
因此,C#泛型支持的基于对象编程要比模板支持的基于对象的编程要弱很多。
理念上,泛型编程有些不伦不类,有着太强的面向对象编程的气味。
C#中,使用泛型支持的基于对象的编程范式不如面向对象编程范式。
我认为,C#语言还是应该首先使用面向对象编程范式。
C++/CLI
C++/CLI是为了让C++使用.NET平台而提供的扩展机制。 .NET平台是类似于java的静态强类型动态执行的执行平台。 是面向对象编程范式理念的框 架。 C++/CLI使用了新的语法,使用C++/CLI进行.NET开发时,类似于C#编程。 同时,也可以使用模板进行C++/CLI编程。这是C++/CLI2005新增的功能。 使用C++/CLI进行.NET编程时,既可以使用C#样式的面向对象编程。也可以使用模板支 持的基于对象的编程范式进行开发。 可以把模板支持的基于对象的编程范式和.NET的面向对象的编程范式结合起来使用。 C++/CLI可以同时使用原生C++和.NET编程。如果使用.NET框架执行,那么C++原生代 码就会存放在生成的MSIL中间代码中,在运行时再使用C++编译器编译成机器码。
.NET的互操作机制
.NET运行时本身就是使用COM编写的,是一个COM服务器。因此,.NET和C