定义对象的“引用”

时间:2011-03-10 19:36:22

标签: c#

创建对象时,将返回引用,而不是对象。

这是什么意思?

object a = new object();

此处a包含引用。

如果有人解释了对象的创建,引用的创建,将会很有帮助。

5 个答案:

答案 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这样的其他较老的语言中,没有这样的网络,气球人永远无法恢复该气球中的氦气,无法为其他人制造另一个气球。如果你把气球带回来,他真的很感激。这会导致其他问题:您可能会返回气球,但忘记您的兄弟姐妹仍然想要它。他们的背部转动,他们没有注意到你把绳子拉出他们的手,后来当他们转身寻找它时,他们会发现它已经消失并且非常沮丧。

荒谬的比喻?是。它会留在你的脑海里吗?最有可能:))