0

当我创建一个新的 Windows 窗体应用程序时,它会生成 Program.cs 文件,其中包含以下行:

Application.Run(new Form1());

我的问题是如何将 Form1 实例化为正确的形式应该是这样的:

Form1 myForm = new Form1();

它怎么能工作,因为这Form1 myForm部分似乎丢失了。

4

3 回答 3

2

对象实例化的左侧只是声明将保存实例的变量。在您提到的情况下,无需在变量中捕获对象 - 新创建的引用直接传递到Application.Run.

于 2013-04-12T14:46:39.573 回答
2

这就是 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

但我倾向于远离那些东西,因为它很少合适

于 2013-04-12T14:47:11.177 回答
0

考虑到Application.Run()的声明可能看起来像这样:

public void Run(Form formParameter)
{
   this._form = formParameter; 
   //lots of other stuff
}

所以你看, 的值new Form1()将被分配给Run's formParameter。您的直觉部分正确,但具有误导性。在很多情况下,实例化/构造对象而不将对象分配给变量很有用。考虑构造一个对象并在一行中调用它的方法之一new Object().Method()

于 2013-04-12T15:10:57.617 回答