簡體   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