当我创建一个新的 Windows 窗体应用程序时,它会生成 Program.cs 文件,其中包含以下行:
Application.Run(new Form1());
我的问题是如何将 Form1 实例化为正确的形式应该是这样的:
Form1 myForm = new Form1();
它怎么能工作,因为这Form1 myForm
部分似乎丢失了。
对象实例化的左侧只是声明将保存实例的变量。在您提到的情况下,无需在变量中捕获对象 - 新创建的引用直接传递到Application.Run
.
这就是 C# 语言的工作原理。
该Form1 myForm
部分只是创建一个变量,您可以使用它来引用该类的实例。
该new Form1();
部分是创建实例的位。它是Application.Run()
函数关心的实例。
现在,通常在没有引用的情况下创建实例是没有意义的,因为您将无法使用它。但也有一些例外。在这种情况下,实例被分配给Application.Run()
方法中的参数。(所以从技术上讲,有一个参考)
例如:
public void Run(Form form)
{
//can use form parameter here
}
//inside some other function
Run(new Form1());
这就像做:
Form form = new Form1();
然后,该Run()
方法可以根据需要使用该实例。
另一个不需要保留引用的例子是一次性方法调用,例如:
new Form1().DoSomething();
//here we no longer have access to the instance
但我倾向于远离那些东西,因为它很少合适
考虑到Application.Run()
的声明可能看起来像这样:
public void Run(Form formParameter)
{
this._form = formParameter;
//lots of other stuff
}
所以你看, 的值new Form1()
将被分配给Run
's formParameter
。您的直觉部分正确,但具有误导性。在很多情况下,实例化/构造对象而不将对象分配给变量很有用。考虑构造一个对象并在一行中调用它的方法之一new Object().Method()
。