C#从方法返回结构引用

时间:2017-10-09 15:55:21

标签: c# struct stack return

在C ++中,返回方法中在堆栈上分配的对象的引用,由于事实导致堆栈对象在方法离开范围时被销毁,因此产生垃圾值。鉴于C#结构在堆栈上分配,这会产生垃圾值吗?

struct Test
{
    //data
}

Test Foo()
{
    Test t1 = new Test();
    return t1;
}

2 个答案:

答案 0 :(得分:0)

C#中的

关键字struct允许描述值类型。当您从方法返回值类型时,它会创建它的新副本。

答案 1 :(得分:0)

我认为你应该读到这个:http://mustoverride.com/ref-returns-and-locals/

简而言之,C#Design团队决定不允许通过引用返回本地变量。

  

- 禁止通过引用返回本地变量。这是   为C#选择的解决方案。 - 保证引用   不会超过引用的变量C#不允许返回   通过引用引用局部变量。有趣的是,这是   Rust使用的方法相同,但原因略有不同。   (Rust是一种RAII语言,在退出时会主动摧毁当地人   范围)

即使使用ref关键字,如果您继续尝试此操作:

public struct Test
{
    public int a;
}

public ref Test GetValueByRef()
{
    var test = new Test();
    return ref test;
}

您将看到编译器出现以下错误:

  

无法返回本地'测试'通过引用,因为它不是ref本地