繁体   English   中英

C#从方法返回结构引用

[英]C# return struct reference from method

在C ++中,返回方法中分配给堆栈的对象的引用会产生垃圾值,原因是该方法离开作用域后,堆栈对象被破坏。 假设在C#中将结构分配到堆栈上,这还会产生垃圾值吗?

struct Test
{
    //data
}

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

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

我认为您应该阅读以下内容: http : //mustoverride.com/ref-returns-and-locals/

简而言之,C#设计团队决定禁止通过引用返回局部变量。

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

即使使用ref关键字,也可以尝试以下操作:

public struct Test
{
    public int a;
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM