C++超集C++/CLI模块的基本语法

C++超集C++/CLI模块的基本语法

托管对象的创建和引用

在前文中我们已经演示过创建一个托管对象,对于如下C#代码:

System.Object x = new System.Object();

其在C++/CLI中的等价代码如下:

System::Object^ x = gcnew System::Object();

和传统的C++创建的语法比较下,

P* x = new P();

我们不难发现,对于托管对象,主要引入了如下两个语法:

用gcnew代替new实现托管对象的创建用^代替*实现托管对象的指针

这种方式创建的对象是可以直接被CLR支持的,可以在C#中使用。托管对象指针使用的方式和传统的对象指针还是比较类似的,直接使用->即可:

System::Object^ x = gcnew System::Object(); auto str = x->ToString();

另外,C++/CLI也有一种类似于C++的对托管对象的引用的语法:

System::Object^ x = gcnew System::Object(); System::Object% y = *x; auto str = y.ToString();

由于这种方式在C#里没有对应的语法,用起来感觉怪怪的,也不方便于其它.net语言集成。

托管类型的定义

我们也可以自定义托管类型,在CLR中,托管类型是分为引用类型(class)和值类型(struct)的,在C++/CLI中的分别定义方式如下:

引用类型:

public ref class MyClass { };

值类型:

public value class MyClass { };

在ISO C++中类定义中加上了ref或value标记为托管类型,还算比较容易使用。

枚举

枚举的定义和C++11的enum class一样,它像数字那样可以同时应用于托管类型和非托管类型。

public enum class SomeColors { Red, Yellow, Blue };

或者更精确的表示:

public enum class SomeColors : char { Red, Yellow, Blue }; 数组

C++/CLI中新增了array<T> ^的方式定义数组。

array<int> ^a = gcnew array<int>(100) { 1, 2, 3 };

或者使用它的完整版:

cli::array<int> ^a = gcnew cli::array<int> {1, 2, 3}; 不定参数

对于C#中的不定参数的语法:

void foo(params string[] args)

在C++/CLI中对应的版本为:

void foo(... array<String^>^ args)

推荐阅读

    16天的最新的内存引用:4gb上涨10元

    16天的最新的内存引用:4gb上涨10元,,内存价格上涨到4GB 10元 在今天中关村的现货市场,内存价格总体呈发展趋势,但它是小的。内存市场昨日下

    atsl电脑板故障|atsl车身控制模块故障

    atsl电脑板故障|atsl车身控制模块故障,atsl电脑板故障,1、2机械故障通过维修更换内部机械零件,可以解决机械故障。2、电路的故障有保险丝烧

    wps如何生成引用

    wps如何生成引用,WPS教程,1.wps怎么添加引用文献wps添加引用文献:1、打开文档,点击WPS文字右侧下拉菜单。2、打开插入>引用>脚注与尾注3、选

    金蝶eas固定资产模块

    金蝶eas固定资产模块,,1.金蝶EAS8O版本中固定资产模块中变更如何操作路径:固定资产管理-固定资产管理-业务处理-固定资产变更步骤:1、在变更

    Python之可迭代对象、迭代器、生成器

    Python之可迭代对象、迭代器、生成器,迭代,生成器,一、概念描述可迭代对象就是可以迭代的对象,我们可以通过内置的iter函数获取其迭代器,可

    应用程序对象

    应用程序对象,,应用程序对象是一个应用程序级对象,用于在所有用户之间共享信息,并且在Web应用程序运行期间可以保存数据。 应用的性质: 方法