2012-02-08 244 views
0

如果在函數內部創建一個對象並且該函數返回該類型的對象,則如何處理內存。從函數返回對象

實施例:

Public Function GetEmployee(employeeid as integer) as employee 

Dim oEmployee as new employee 
oEmployee.FirstName="Bob" 
... 
... 

return oEmployee 
end function 

這是否接收仍在對象的指針一個在該函數內使用的存儲器位置中的變量?

當你做一個oEmployee2=oEmployee

關於什麼是oEmployee2只是一個指針?現在,對員工的任何更改都會影響到其他人。只是想從記憶的角度理解和範圍是如何工作的

感謝

+1

閱讀了在C#,例如參考VS值類型在這裏:http://www.albahari.com/valuevsreftypes.aspx – BrokenGlass 2012-02-08 03:06:46

回答

1

假設oEmployee是一個引用類型(不是結構體),如果您將它作爲參數傳遞,那麼您傳遞的是引用。在.NET中,您應該考慮引用類型與值類型。

這篇文章確實幫助我理解了當我剛開始時如何分配內存。

http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx

+0

偉大的文章。謝謝 – jdross 2012-02-08 04:06:29

+0

該文章的第2頁處理您關於傳遞對象作爲參數的問題 – syclee 2012-02-08 04:21:14

+0

爲什麼在用VB編寫問題時將此標記爲答案,答案是關於C#? – jhsowter 2012-02-08 05:39:09

2

假設employee引用類型(例如任何類),該方法將在引用(在概念上類似於返回一個指針非託管語言)到對象實例(通常在堆上)。由於只存在一個對象實例,所以對其進行的所有更改都會影響實例。

如果employee值類型(例如,任何結構或基元類型),則返回實例的單獨副本。