2016-11-23 125 views
0

c#在這裏框一個結構?通過引用傳遞結構時C#框或複製?

struct S { int x; } 

void foo(ref S s) { s.x = 1; } 

main { 
    var s = new S(); 
    foo(ref s); <-- boxing?? 
} 

我聽說過有關結構類的奇怪的東西。這裏有拳擊嗎?這是傳遞成員的副本嗎?

class C { S s; } 

main { 
    var c = new C(); 
    foo(ref c.s); <-- boxing here?? copy here??? 
} 
void foo(ref S s) { s.x = 1; } 
+1

如果產生副本,'ref'會有什麼意義?這是沒有'ref'的情況。所以'ref',爲了不完全多餘,必須有所不同,因爲......不作複製。 – stakx

+0

我是一名C++開發人員。當我看看C#做什麼時,一切似乎都是多餘的! :)我想知道在使用它之前,什麼東西會花費我。那麼爲什麼不會在值類型框中引用值類型,以便它可以像引用類型那樣傳遞它。請問。 – johnnycrash

+2

任何一個代碼片段都沒有複製或裝箱。 –

回答

4

所以Struct是值類型,如果你讀裁判

的文件不要混淆引用傳遞與 引用類型概念的概念。這兩個概念是不一樣的。方法參數 可以通過ref進行修改,無論它是否爲值類型或參考類型爲 。 當通過引用傳遞 時,沒有值類型的裝箱。

ref (C# Reference)

這裏解釋究竟裁判做。

ref關鍵字導致參數傳遞參數,而不是 值。通過引用傳遞的效果是,對調用方法中參數 的任何更改都會反映在調用方法中。

+0

當結構是類的成員時,情況如何? – johnnycrash

+0

@johnnycrash Struct仍然是值類型,所以沒有區別。 – mybirthname