net 语言
DESCRIPTION
.NET 语言. C++ with Managed Extensions. C++ with Managed Extensions. 微软不能单方面修改 C++ 微软为 C++ 定义了一套受控扩充件 (Managed Extensions) Managed C++ 定义了一些新关键字 __gc: 指出某个数据类型受垃圾回收机制管制。 __value: 指出某个数据类型不受垃圾回收机制管制。 __interface: 定义一个 CTS 接口类型。 __box: 将 CTS 值类型转换成引用类型。 __unbox: 将装箱的 CTS 值类型转回其原来形式。 - PowerPoint PPT PresentationTRANSCRIPT
.NET 语言
C++ with Managed Extensions
C++ with Managed Extensions 微软不能单方面修改 C++ 微软为 C++ 定义了一套受控扩充件 (Managed Ext
ensions) Managed C++ 定义了一些新关键字
__gc: 指出某个数据类型受垃圾回收机制管制。 __value: 指出某个数据类型不受垃圾回收机制管制。 __interface: 定义一个 CTS 接口类型。 __box: 将 CTS 值类型转换成引用类型。 __unbox: 将装箱的 CTS 值类型转回其原来形式。 __delegate: 定义一个 CTS 委派类型。
Managed C++ 程序样例 例 1. 用 C++ 托管扩展编写的 Hello World (Hello
VC.cpp)
#using <mscorlib.dll>// Allow easy reference to the System namespace classes.using namespace System;// The global function, main, is the application's entry point.void main() { // Write text to the console. Console::WriteLine(S"Hello World using Managed Exte
nsions for C++!");}
Managed C++ 程序样例 用 C++ 编写托管目标代码,要求原程序中包含
#using <mscorlib.dll>编译时加 clr 选项。
在 C++ 托管扩展中, #using 指令与 #import 指令类似,用于合并类型库中的信息。 #using 与 #include 指令有区别, #include 用于合并
源代码而不是预生成库。 为将命名空间导入到程序中(换言之,为便于引用 Syst
em 对象而不必完全限定其路径),还需要加上下面这条语句:
using namespace System;
Managed C++ 程序样例 在 C++ 托管扩展中, Console::WriteLine 中需要有双冒号来
表示范围。双冒号用于分隔命名空间和类名称以及类名称和静态方法。
字符串前面的 S 通知编译器将其编译为 System::String* ,这在托管代码中的性能要好于 C++ 字符串。
使用以下命令行指令来编译此程序: cl.exe /clr HelloVC.cpp clr 开关,为公共语言运行库编译,它按照运行库的要求告知编译器创建托管代码。
最后,运行结果可执行程序将产生以下输出:Hello World using Managed Extensions for C++!
Managed C++ 程序样例 例 2
// A Managed C++ example #using <mscorlib.dll>__gc __interface IMath { int Factorial(int f);
double SquareRoot(double s); };
Managed C++ 程序样例__gc class Compute : public IMath { public: int Factorial(int f)
{ int i; int result = 1; for (i=2; i<=f; i++)
result = result * i; return result;
} ; public: double SquareRoot(double s) { return System::Math::Sqrt(s); }
} ;
Managed C++ 程序样例void main(void) { Compute *c = new Compute;
int v; v = 5; System::Console::WriteLine( "{0} factorial: {1}", __box(v), __box(c->Factorial(v)));System::Console::WriteLine( "Square root of {0} : {1:f4}", __box(v), __box(c->SquareRoot(v)));
}
Managed C++ 程序样例 Managed C++ 要求装箱必须显示进行。
Managed C++ 代码和 UnManaged C++ 代码可共存于同一个进程中。
Managed C++ 对 CLR 提供了完整的支持。 C++ 是 VS.NET 中唯一能直接编译为本机代
码的语言。