为什么我需要这句话?(c#)

本文关键字:这句话 为什么 | 更新日期: 2023-09-27 18:11:12

我需要帮助理解为什么我需要下面代码中的这一行,以及它是做什么的:

this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);

如果我不添加那一行,保存永远不会发生。这就像Form1_FormClosing函数中的代码没有执行,因此程序总是以默认值开始。但我从来没有使用过这样的其他事件,如按钮点击等。没有它,他们工作得很好。为什么这个不一样?

public Form1()
{
    InitializeComponent();
    this.Location = Settings.Default.WindowLocation;
    this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    Settings.Default.WindowLocation = this.Location;
    Properties.Settings.Default.Save();
}
我对这个愚蠢的问题感到抱歉,但我对c#(或编程…)一无所知。我只是想为我的程序写一个简单的GUI。在我发现我需要这条线之后,它现在运行得很好……我只是想知道为什么。

为什么我需要这句话?(c#)

FormClosing事件发生在表单关闭之前,可以由用户通过用户界面(UI)关闭,也可以通过编程方式调用form类中的Close或Application类中的Exit等方法。此事件可以取消。

当你创建一个FormClosingEventHandler委托时,你确定了处理事件的方法。若要将事件与事件处理程序关联,请向事件添加委托的实例。事件处理程序将在事件发生时调用,除非您删除委托。

c#中的委托类似于C或c++中的函数指针。使用委托允许程序员将对方法的引用封装在委托对象中。然后可以将委托对象传递给可以调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或c++中的函数指针不同,委托是面向对象的、类型安全的、安全的。

委托声明定义了一个类型,该类型用一组特定的参数和返回类型封装了一个方法。对于静态方法,委托对象封装了要调用的方法。对于实例方法,委托对象封装了实例和实例上的方法。如果你有一个委托对象和一组适当的参数,你可以用这些参数来调用委托。

委托的一个有趣而有用的属性是它不知道或不关心它引用的对象的类。任何东西都可以;重要的是方法的参数类型和返回类型与委托的匹配。这使得委托非常适合"匿名"调用。

委托可以看作是某个方法的占位符。

通过定义一个委托,你是在告诉你的类的用户:"请随意在这里放置任何与这个签名匹配的方法,每次我的委托被调用时,它都会被调用。"

典型的用法当然是事件。所有的OnEventX委托给用户定义的方法。

委托是有用的,为您的对象的用户提供一些自定义他们的行为的能力。大多数时候,您可以使用其他方法来实现相同的目的,我不认为您可以被迫创建委托。在某些情况下,这是完成任务最简单的方法。

来自FormClosingEventHandler MSDN, Delegate MSDN的引用