用C++/CLI搭建C++和C#之间的桥梁(二)—— 基本语法
2015-11-04 23:16
399 查看
托管对象的创建和引用
在前文中我们已经演示过创建一个托管对象,对于如下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)
在前文中我们已经演示过创建一个托管对象,对于如下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)
相关文章推荐
- 转载:C++11尝鲜:std::move和std::forward源码分析
- 爬爬爬之路:OC语言(八) 属性 KVC简单介绍
- c++对文件操作
- C语言分割字符串函数strtok
- C++primer学习:模板编程(6):模板实参推断和forward的运用与源代码
- 第一节:程序设计的基本概念
- 关于QWidget的子类调用show()方法不能显示的问题
- C++ 11 ----Lambda表达式
- 二级指针作为函数参数申请内存
- C++ socket shutdow 与 close 的使用
- 糖果<DP><C++>
- c语言中的输入
- C++11新特性之 CALLBACKS
- C++11新特性之 CALLBACKS
- [温故而知新] 《深度探索c++对象模型》——构造函数
- gdb调试器
- C++基础——简单而强大的bitset
- C语言函数名与函数指针详解
- C语言EOF
- C++、C#、java算法学习日记06----堆排序思想(HeapSort)