C# 事件
C# 事件
事件是即将发生的特殊事件。这里我们以一个事件为例,微软为开发者启动事件。在本次活动中,Microsoft 希望让开发人员了解现有产品或新产品的功能。为此,Microsoft 将使用电子邮件或其他广告选项让开发人员了解事件。因此,在这种情况下,Microsoft 将作为引发事件并通知开发人员的发布者。开发人员将作为事件的订阅者来处理事件。
同样,在 C# 中,事件遵循相同的概念。在 C# 中,事件可以是订阅者、发布者、订阅者、通知和处理程序。通常,用户界面使用事件。这里我们以 Windows 中的 Button 控件为例。 Button 执行多个事件,例如单击、鼠标悬停等。自定义类包含 Event,通过它我们将通知其他订阅者类将要发生的其他事情。因此,在这种情况下,我们将定义 Event 并将事件通知其他类,其中包含事件处理程序。
事件是一个封装的委托。 C# 和 .NET 都支持带有委托的事件。当应用程序的状态发生变化时,事件和委托会向客户端应用程序发出通知。委托和事件都紧密耦合用于调度事件,并且事件处理需要委托的实现。发送事件类称为发布者,接收者类或处理事件称为订阅者。
关于事件的关键点是:
事件的关键点如下:
在 C# 中,事件处理程序将这两个参数作为输入并返回 void。
事件的第一个参数也称为源,它将发布对象。
发布者将决定我们何时必须引发事件,而订阅者将决定我们必须做出何种回应。
事件可以包含多个订阅者。
通常,我们将事件用于单用户操作,例如单击按钮。
如果事件包含多个订阅者,则同步调用事件处理程序。
事件声明
语法
public event EventHandler CellEvent;
Event 的实现步骤
在类中声明Event,首先要声明委托的事件类型。
目的sender, EventArgs e);
事件的声明
公共事件 CellEventHandler CellEvent;
事件的调用
if(CellEvent != null) CellEvent(this, e);
我们只能在声明事件的类中调用事件。
连接事件
OurEventClass.OurEvent += new ChangedEventHandler(OurEventChanged);
分离事件
OurEventClass.OurEvent-= new ChangedEventHandler(OurEventChanged);
委托作为一个函数的指针工作。它是一种引用数据类型,它保存方法的引用。 System.Delegate 类隐式派生所有委托。
可以使用 delegate 关键字声明委托,后跟签名
委托的语法
<access modifier> delegate <return type> <delegate_name>(<parameters>)
委托示例
public delegate void PrintWord(int value);
上述PrintWord委托可用于指向任何具有相同的方法使用 PrintWord 返回类型和声明的参数。这里我们将举一个声明和使用 PrintWord 委托的例子。
class Program1
{
// declare delegate
public delegate void PrintWord(int value);
static void Main(string[] args)
{
// Print delegate points to PrintNum
PrintWord printDel = PrintNum;
// or
// Print printDel = new Print(PrintNumber);
printDel(100000);
printDel(200);
// Print delegate points to PrintMoney
printDel = PrintMoney;
printDel(10000);
printDel(200);
}
public static void PrintNum(int num)
{
Console.WriteLine("Number: {0,-12:N0}",num);
}
public static void PrintMoney(int money)
{
Console.WriteLine("Money: {0:C}", money);
}
}
输出:
在上面的例子中,我们声明了 PrintWord 委托,它接受 int 类型参数并返回 void。在 main() 方法中,我们声明了 PrintWord 类型的方法并分配了 PrintNum 名称的方法。现在我们将调用 PrintWord 委托,该委托又调用 PrintNum 方法。同样,如果将 PrintWord 委托变量分配给 PrintMoney 方法,则这将调用 PrintMoney 方法。
此外,我们可以使用 new 运算符创建委托对象并指定其名称方法,如下图:
PrintWord printDel = new PrintWord(PrintNum);
可以声明Delegates,如下图:
public delegate void someEvent();
public organize event