![](/img/trans.png)
[英]Why can't a C# struct method return a reference to a field, but a non-member method can?
[英]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.