C#返回local ref变量

时间:2014-03-16 06:36:07

标签: c#

我来自c ++背景并在C#工作。 任何人都可以解释为什么这是有效的(如果是):

public int[] GetArray(int elementCount)
{
    int[] newArray = new int[elementCount];

    return newArray;
}

" newArray"是ref类型?这本书的例子是错的还是我们可以安全地在c#中返回一个引用?

1 个答案:

答案 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]
}