我刚刚用C#编写了一个类似于这样的Swap例程:
它与这段C++代码执行相同的操作:
static void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
它与这段C++代码执行相同的操作:
void swap(int *d1, int *d2)
{
int temp=*d1;
*d1=*d2;
*d2=temp;
}
那么,ref
和out
关键词在C#中是否像指针一样,而不需要使用unsafe
代码?
ref
参数使用++
,但这并不意味着相同的事情。 - Ben Voigtref
和out
始终指向堆栈的活动区域”是完全错误的。您自己的示例将创建一个对GC堆上对象的引用。 - Ben Voigt