繁体   English   中英

为什么我需要那条线? (C#)

[英]Why do I need that line? (C#)

我需要帮助,以了解为什么在以下代码中需要此行以及它的作用:

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。 在我发现我需要这条线之后,它现在可以正常工作了……我只想了解为什么。

FormClosing事件在用户通过用户界面(UI)或通过编程方式(通过调用诸如Form类中的Close或Application类中的方法)以关闭窗体之前发生。 此事件可以取消。

创建FormClosingEventHandler委托时,您将确定将处理事件的方法。 要将事件与事件处理程序关联,请将委托的实例添加到事件。 每当事件发生时都会调用事件处理程序,除非您删除委托。

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

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

委托的一个有趣且有用的属性是它不知道或不在乎其引用的对象的类。 任何对象都可以; 重要的是方法的参数类型和返回类型与委托的参数类型匹配。 这使代表非常适合“匿名”调用。

可以将委托视为一种/某些方法的占位符。

通过定义一个委托,您对您的类的用户说:“请随意在此处放置与该签名匹配的任何方法,每次调用我的委托时都将调用该方法”。

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

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

FormClosingEventHandler MSDN引用委托MSDN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM