在使用C++/CLI代码传递参数时,^符号是否替换了C#的"ref"?

dev*_*per 19 c# c++-cli

在C#中,通过引用传递:

void MyFunction(ref Dog dog)
Run Code Online (Sandbox Code Playgroud)

但是到目前为止我看到的C++/CLI代码示例中没有使用ref但是使用了^符号:

void MyFunction(Dog ^ dog)
Run Code Online (Sandbox Code Playgroud)

参数传递时是否使用^符号直接替换ref?还是有其他一些我不知道的含义?

附加问题:我也看到了很多:

Dog ^ myDog = gcnew Dog();
Run Code Online (Sandbox Code Playgroud)

看起来它*在C++中像(指针)一样使用.它的工作原理是否类似?

谢谢!

ild*_*arn 32

如果Dog是引用类型(class在C#中),则C++/CLI等效项为:

void MyFunction(Dog^% dog)
Run Code Online (Sandbox Code Playgroud)

如果Dog是值类型(struct在C#中),则C++/CLI等效项为:

void MyFunction(Dog% dog)
Run Code Online (Sandbox Code Playgroud)

作为类型装饰器,^大致与*C++ %相关,并且大致与&C++ 相关.

作为一元运算符,您通常仍需要*在C++中使用C++/CLI *,但通常需要%在C++中使用C++/CLI &.

  • @developer:如果`Dog`是引用类型,C++/CLI中的`void MyFunction(Dog ^ dog)`将与C#中的`void MyFunction(Dog dog)`相同.`^`表示引用类型,`%`表示通过引用传递(C#中的`ref`). (2认同)