4

我有一个名为的非静态类ImplementHeaderButtons,其中包含一个名为Implement. 类名和方法名不重要,重要的是它们不是静态的,所以需要实例化才能使用,对吧?

所以我曾经这样做:

var implementHeaderButtons = new ImplementHeaderButtons();
implementHeaderButtons.Implement(this, headerButtons);

但后来我决定尝试一下它(实际上我正在寻找一种使它成为单线的方法)并且我得出结论认为以下代码也可以工作:

new ImplementHeaderButtons().Implement(this, headerButtons);

现在,我不需要一个变量来保存实例,但我的问题是:我为什么可以动态创建一个类的新实例并调用它的方法而没有变量来存储实例?

如果它没有按预期工作,我不会感到惊讶,但确实如此。

4

3 回答 3

9

它们不是静态的,所以需要实例化才能使用,对吧?

是的,但是您仍在使用 实例化该类new ImplementHeaderButtons(),只是没有在任何地方存储对该新创建实例的引用。

您仍然可以像在示例中所做的那样在此实例上调用方法,但之后您将无法在没有引用的情况下对它执行任何其他操作。最终,垃圾收集器将清理该实例(前提是您调用的方法未在某处存储对该对象的引用)。

于 2012-09-24T00:59:44.533 回答
0

为方便起见,变量只是一个参考。您没有命名它,但它就在那里,在堆栈的顶部(通常;-))。只要您可以通过使用它的名称(您没有)或通过处理您刚刚创建的“未命名”对象来引用变量,您是否可以调用它的方法。

于 2012-09-24T01:01:33.267 回答
0

您的调用将new ImplementHeaderButtons()返回 ImplementHeaderButtons 的一个实例。然后,您调用.Implement()该实例。

可以这样想:

(new ImplementHeaderButtons()).Implement(this, headerButtons);
于 2012-09-24T01:03:11.310 回答