3 回答
TA貢獻1851條經驗 獲得超3個贊
答案很長:當通過值傳遞引用類型參數時,只傳遞引用,而不是對象的副本。這就像在C或C ++中傳遞指針(按值)。調用者不會看到對參數本身值的更改,但會看到參考指向的對象的更改。
當通過引用傳遞參數(任何類型)時,這意味著調用者可以看到對參數的任何更改 - 對參數的更改是對變量的更改。
文章更詳細地解釋了所有這些,當然:)
有用的答案:你幾乎不需要使用ref / out。它基本上是一種獲得另一個返回值的方法,通常應該被準確地避免,因為這意味著該方法可能試圖做太多。情況并非總是如此(TryParse等等是合理使用的規范示例out)但使用ref / out應該是相對罕見的。
TA貢獻1836條經驗 獲得超4個贊
可以將非ref參數視為指針,將ref參數視為雙指針。這對我幫助最大。
您幾乎不應該通過ref傳遞值。我懷疑,如果不是互操作問題,.Net團隊永遠不會將其包含在原始規范中。處理ref參數解決的大多數問題的OO方法是:
對于多個返回值
創建表示多個返回值的結構
對于作為方法調用結果在方法中更改的基元(方法對基本參數有副作用)
在對象中實現方法作為實例方法,并在方法調用中操縱對象的狀態(而不是參數)
使用多重返回值解決方案并將返回值合并到您的狀態
創建一個包含可由方法操作的狀態的對象,并將該對象作為參數傳遞,而不是基元本身。
TA貢獻1856條經驗 獲得超11個贊
您可以編寫一個完整的C#應用程序,并且不會通過ref傳遞任何對象/結構。
我有一位教授告訴我這件事:
您使用refs的唯一地方是:
想要傳遞一個大對象(即,對象/結構中有對象/結構到多個級別)并且復制它會很昂貴,
您正在調用Framework,Windows API或其他需要它的API。
不要因為你能做到這一點。如果您開始更改參數中的值并且沒有引起注意,您可以通過一些令人討厭的錯誤獲得幫助。
我同意他的建議,在學校開始的五年多時間里,除了調用Framework或Windows API之外,我從未需要它。
- 3 回答
- 0 關注
- 1068 瀏覽
添加回答
舉報
