C# 为什么我可以创建一个类的实例而不将它存储到变量中,并且仍然让所有的东西都工作?

C# 为什么我可以创建一个类的实例而不将它存储到变量中,并且仍然让所有的东西都工作?,c#,class,variables,instance,C#,Class,Variables,Instance,我有一个名为ImplementHeaderButtons的非静态类,它包含一个名为Implement的非静态公共方法。类和方法的名称并不重要,重要的是它们不是静态的,所以它们需要实例化才能使用,对吗 所以我过去常这样做: var implementHeaderButtons = new ImplementHeaderButtons(); implementHeaderButtons.Implement(this, headerButtons); 但后来我决定对它进行一些研究(实际上我正在寻找一

我有一个名为
ImplementHeaderButtons
的非静态类,它包含一个名为
Implement
的非静态公共方法。类和方法的名称并不重要,重要的是它们不是静态的,所以它们需要实例化才能使用,对吗

所以我过去常这样做:

var implementHeaderButtons = new ImplementHeaderButtons();
implementHeaderButtons.Implement(this, headerButtons);
但后来我决定对它进行一些研究(实际上我正在寻找一种方法使它成为一行程序),我得出结论,下面的代码也同样有效:

new ImplementHeaderButtons().Implement(this, headerButtons);
现在,我不需要一个变量来保存实例,但我的问题是:如何在没有变量存储实例的情况下动态创建一个类的新实例并调用它的方法?

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

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

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


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

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

新ImplementHeaderButtons()
的调用返回ImplementHeaderButtons的实例。然后,在该实例上调用
.Implement()

你可以这样想:

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

我真的很困惑,为什么你认为它不起作用。@KirkWoll我想我很困惑,因为我没有足够的智慧去思考它,哈哈。所以它就像是只要被调用的方法完成了它的工作,然后被清理干净,它就活了一样?@IneedHelp是的,只要在该方法中,它不产生对自身的额外引用(比如将事件处理程序注册到某些未过期的应用程序事件),就是这样。实际上,当垃圾收集器开始工作时,如果Implement()方法没有将对该对象的引用保存到其他位置,它就会被清除。是的,这是我首先尝试的,然后决定尝试不使用括号。但出于某种原因,我想知道它在没有实际存储实例的情况下是如何工作的。我现在明白了,它就像一个临时变量。