2012-08-11 50 views
1

当写C#新增无参考持有者吗?

Console.Write(new Class().Work)

是“新class`仍然会产生一个参考?

堆栈上的值是多少? (地址)

+1

是的,当你调用新的ClassName()时,即使你没有把它分配给任何东西,它也会返回一个引用,即使它以某种方式优化它而不实际返回引用,工作仍然可以访问本地成员,或要求参考信息 – 2012-08-11 18:17:11

+0

“堆栈中的值”是一个实现细节。 IOW你不需要知道这一点。如果你真的想知道在封面下发生了什么,请检查IL。 – 2012-08-11 18:19:34

回答

1

即:newobj,callvirt,呼叫

是,创建一个对象 - 基准是在堆栈上,并且由callvirt消耗(剩下的呼叫的方法的返回值)

不需要变量,虽然它与一个合法。

1

当然它会生成一个参考,一个Class的实例必须存在才能调用Work就可以了。只是没有一个变量来持有它。

不确定你对堆栈的意思。

+0

该堆栈包含地址值 – 2012-08-11 18:20:17

+0

@RoyiNamir对不起,我不确定我明白你的意思。 – kprobst 2012-08-11 18:27:23

1

这将是参考。你的问题中的新课程。该值将在堆栈地址处指向该类的HEX值。因此,在.NET中,如果通过引用引用地址,则地址将存储在堆栈中,以便当您要访问它时,编译器会找出哪个HEX值,然后从中获取适当的对象(类,函数,任何东西)堆。

+0

说这是一个“十六进制”值是误导 - 数字只是一个整数。十六进制只是为开发人员显示地址的便捷方式 - 部分原因是因为它们便于打破打字和阅读的界限。计算机不会像“十六进制”那样思考 – 2012-08-11 18:52:38