请澄清我对对象和参考的理解,值类型是最新的吗?
对象表示RAM中的内存位置,我们在执行程序时分配内存
参考表示内存中的位置(地址)。
通过引用传递意味着 - 我们正在向函数传递或指向一个内存位置,以获取已通过内存地址的函数的值。
按值传递意味着我们没有给出任何我们给函数赋予实际值的地址。这个值来自RAM?在执行时它不接触ram吗?它只来自另一个内存位置..但是在视觉上下文中执行的术语有什么不同?我怎么能想象?
答案 0 :(得分:3)
我不担心RAM /等。
从概念上讲,这里的主要区别在于你传递给方法。
当您通过引用传递(ref或out in C#)时,您将传递原始对象的内存中的位置。
当您通过值传递时,您正在复制实际变量的值,并且该方法按值获取前一个调用堆栈中使用的变量的完整副本。
如果变量是引用类型,则传递的值是对对象的引用,该对象基本上是内存位置。引用将复制到方法中。
如果有问题的对象是值类型,则复制整个对象,并且该方法接收对象的副本。
答案 1 :(得分:1)
object
是class
的一个实例。对象的内存和任何成员都存储在堆上。通常,这被称为[Reference Type][2]
,意味着它被作为对位置的引用(指针)处理。
相比之下,struct
是Value Type
,可直接处理。
传递项目By Reference
(ref
关键字或out
关键字作为Reed指出)将引用(指针)传递给相关项目。这意味着如果您通过引用传递object
,则表示您正在向指向内存中对象的指针传递指针。
对象
arg(stack) -> oRef(heap) -> oData(heap)
这意味着我们可以将指针更改为另一个地方(即完全不同的对象)。
传递项目按值表示传递有问题的项目本身。在结构体的情况下,整个事物在堆栈上传递。在对象的情况下,引用在堆栈上传递。这意味着当一个对象被传递时,该对象仍然可以被操作并且它的成员被修改,但它不能完全被另一个对象替换。
arg(stack) -> oData(heap)