创建对象时,将返回引用,而不是对象。
这是什么意思?
object a = new object();
此处a
包含引用。
如果有人解释了对象的创建,引用的创建,将会很有帮助。
答案 0 :(得分:4)
我认为参考就像是一套到达房屋的方向,房子代表了房屋本身。
所以,如果你要告诉某人如何到你的房子,你可以在一张纸上写下这些指示并交给他们 - 这就像分配一个变量的参考。
来到你的榜样:
object a = new object();
这就像建造一所新房子(调用构造函数)然后在一张纸上(变量a
),你写下了去新房子的指示。这篇论文没有房子本身 - 只是方向。如果有人复制了这张纸的内容,就像这样:
object b = a;
这不会创建第二个房子。它只是将纸张a
中的路线复制到纸张b
。同样地,这两张纸是独立的 - 您可以将a
的值更改为不同的方向集,并且它不会改变b
上的内容。
我有一个article,试图以另一种方式解释它,你可能会觉得有帮助。
答案 1 :(得分:3)
以下声明:
object a = new object();
实际上做了两件事。
首先,new object()
分配必要的内存来存储实例在堆上分配并返回刚分配的堆上的地址。
其次,评估作业并将new
返回的值指定给a
。
当你说“a持有引用”时,它意味着a是堆栈中的内存(或寄存器中,或者在堆上,而不是引用的生命周期),它指向实例的堆位置创建
答案 2 :(得分:1)
使用new
关键字实例化类时,会在堆上创建一个对象。它还没有被任何人引用。如果一个对象没有自己的引用,很快就会收集垃圾。要使用对象操作,您需要引用它。因此,您创建一个包含对象地址(引用)的变量。
答案 3 :(得分:0)
对于大多数现代语言,您不必担心引用与对象本身。在当天(例如c ++),您将不得不担心引用(有时称为指针)甚至是为它们分配的内存。现在系统(以及所谓的垃圾收集器)为你担心它。
以下是详细信息。您的示例行表示以下内容:
1) allocate memory for object
2) run the constructor
3) put the memory location of that object in the variable "a"
作为程序员,你在概念上的意义是什么?大多数时候并不多。在C#中,您仍然可以将变量a视为对象。你不必担心它指向引擎盖下的物体。大多数时候没关系。
重要的是当你需要关注对象的生命周期时。因为你有一个对象的引用它不会被释放,这意味着如果它正在使用系统资源,它将继续这样做。
当一个对象不再被引用时,它将被垃圾收集器释放。
答案 4 :(得分:0)
对于桩的另一个诙谐的比喻:物体是氦气球,参考是绑在你持有的气球上的一根绳子。说new object()
相当于在展会(你的节目)要求一个气球人(记忆管理员)换一个新的气球。他可以通过递给你的绳子给你一个气球,或者他也可以告诉你没有气球。你可能会发现后者非常沮丧并且在博览会上哭泣。
你可能希望与你的兄弟姐妹分享气球,这里的比喻开始分崩离析。这可以看作是你和你的兄弟用手握着相同的绳子,或者第二根绳子被绑在气球上给你的兄弟姐妹。必须注意确保那些持有与气球相连的绳子的人协调他们的动作,否则气球可能被撕裂或毁坏。
最后,当你厌倦气球时,用C#这样的语言,你可以简单地放开字符串。如果其他人仍然拿着绳子它不会去任何地方,但如果它们不是它,它无害地漂浮在天空中的网中,气球家伙定期收集释放的气球以补充他的股票。在像C这样的其他较老的语言中,没有这样的网络,气球人永远无法恢复该气球中的氦气,无法为其他人制造另一个气球。如果你把气球带回来,他真的很感激。这会导致其他问题:您可能会返回气球,但忘记您的兄弟姐妹仍然想要它。他们的背部转动,他们没有注意到你把绳子拉出他们的手,后来当他们转身寻找它时,他们会发现它已经消失并且非常沮丧。
荒谬的比喻?是。它会留在你的脑海里吗?最有可能:))