2012-02-08 156 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值类型(例如,任何结构或基元类型),则返回实例的单独副本。