我来自c ++背景并在C#工作。 任何人都可以解释为什么这是有效的(如果是):
public int[] GetArray(int elementCount)
{
int[] newArray = new int[elementCount];
return newArray;
}
" newArray"是ref类型?这本书的例子是错的还是我们可以安全地在c#中返回一个引用?
答案 0 :(得分:3)
newArray
- 然后将堆变量返回给调用者,这是安全的。
我的C ++很生疏,但这大致相当于:
int* Class1::CreateArray(int elementCount)
{
// heap allocation + return a pointer to the first element
return new int[elementCount];
}
AFAIK在不使用unsafe
代码的情况下,无法在C#中实现对(本地)堆栈分配变量的引用的不安全返回,例如像这样的C ++代码在C#中是不可能的:
int* Class1::CreateArray()
{
int newArray[5]; // stack allocated
return newArray; // Or &newArray[0]
}