【发布时间】:2020-04-30 19:09:20
【问题描述】:
正如我们所读到的,当为MyClass myClass = new MyClass(); 之类的类创建对象时,将创建实例并将引用指针存储在堆栈内存中。如果该类没有构造函数,则将调用默认构造函数,然后说默认构造函数将返回指针。以类具有非参数化构造函数的情况为例,那么我的构造函数将不会返回任何引用。然后从哪里返回引用的指针以及如何创建它。
【问题讨论】:
-
这不是一个非常准确的描述。如果一个类没有构造函数,它就不能被实例化。如果您没有定义一个作为类定义的一部分,编译器将为您生成一个空的默认值(但某些类可能没有 任何构造函数,例如静态类)。构造函数实际上并不返回 reference。构造函数没有返回类型(它们是隐式无效的)。运行时是分配对象,调用构造函数,构造函数返回后返回引用。
-
@madreflection 该引用来自哪里?因为Constructor是Class的入口点。可能应该创建引用。
-
不,
newobjIL 指令就是这样做的。它调用运行时在托管堆上分配内存。 It 然后调用构造函数。newobj采用元数据标记,用于标识要使用的构造函数,因此它知道分配内存后要调用什么。 -
我已经读了几遍了,但无法弄清楚问题是什么。我认为它在最后一句中,但很难解析。
-
@mjwills:我希望在理顺 OP 对前面几点的理解时,可以提出一个更好的问题。我也不确定问题是什么,但它是基于不准确的陈述,所以无论如何它没有实际意义。
标签: c# .net class object stack