【问题标题】:Reference type assigned to reference type分配给引用类型的引用类型
【发布时间】:2017-05-01 20:45:19
【问题描述】:

我想问我这个例子是否正确,所以如果你将引用类型分配给引用类型,例如:

ClassName p1 = new ClassName();
ClassName p2 = p1;

所以如果我要谈论第一行,当您创建引用变量(类)时,同时发生了两件事。首先,在 HEAP 上(在内存中的某个地址)上创建引用类型(类)的对象,其次,在 HEAP 上创建的对象的引用(到创建对象的位置的地址)在堆栈上创建并存储在变量。

我知道,对于第二行,p1 的引用将被复制到 p2,因此 p2 和 p1 将具有指向内存(堆)中相同对象的相同引用。但我真的很想知道这背后发生了什么。我也知道,存储在引用变量中的引用是在堆栈上分配的。

因此,如果我说将引用类型分配给引用类型背后的真实情况。会不会是:因为引用(“地址”到内存中的对象)实际上就像“值类型”(我不是指堆上的对象),所以将引用类型分配给引用类型,我可以理解为分配引用(地址)按值?

感谢您的回答。

【问题讨论】:

  • 简短的回答是肯定的。

标签: c# reference


【解决方案1】:

虽然有很多不同;引用在概念上类似于内存地址;该变量只存储地址,因此将地址分配给另一个变量只允许它访问相同的内存实例。

引用类型内存存储在堆上,而不是堆栈上,但地址“指针”(变量)存储在堆栈上。当它们超出所有堆栈范围和线程存储范围时,将释放堆内存。

托管内存系统与 C 中的地址/指针概念之间存在许多细微差别和差异 - 但在您的问题范围内,您似乎有正确的理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 2012-02-12
    • 2020-01-28
    • 2010-11-10
    相关资源
    最近更新 更多