C# ASP.NET中包含和不包含委托的事件

C# ASP.NET中包含和不包含委托的事件,c#,asp.net,C#,Asp.net,在一些ASP.NET示例中,我看到事件与委托一起使用,有时不与委托一起使用 请解释 如果订阅由其他人创建的事件(您的asp.net页面或某些asp.net web控件),则无需指定委托。只需提供一个与委托签名匹配的方法 创建事件的人员必须提供代理。订阅者只提供方法 ASP.NET增加了混淆,因为如果在页面定义中指定AutoEventWireup=“true”,它将在编译期间为您“连接”事件 如果订阅由其他人创建的事件(您的asp.net页面或某些asp.net web控件),则无需指定委托。只需

在一些ASP.NET示例中,我看到事件与委托一起使用,有时不与委托一起使用


请解释

如果订阅由其他人创建的事件(您的asp.net页面或某些asp.net web控件),则无需指定委托。只需提供一个与委托签名匹配的方法

创建事件的人员必须提供代理。订阅者只提供方法


ASP.NET增加了混淆,因为如果在页面定义中指定
AutoEventWireup=“true”
,它将在编译期间为您“连接”事件

如果订阅由其他人创建的事件(您的asp.net页面或某些asp.net web控件),则无需指定委托。只需提供一个与委托签名匹配的方法

创建事件的人员必须提供代理。订阅者只提供方法


ASP.NET增加了混淆,因为如果在页面定义中指定
AutoEventWireup=“true”
,它将在编译期间为您“连接”事件

所有事件都是委托类型(它们都继承自
EventHandler
,后者继承自
多播委托
,后者从
委托
中插入)。不过,有时(或者我更愿意说大多数时候)不需要为事件声明自己的自定义委托。您可以使用现有代理,只要它们与事件的签名匹配。随着.NET Framework 2.0中
EventHandler
的引入,对自定义事件委托的需求几乎消失了(只要遵循框架的事件设计)。因此,请执行以下操作:

// declare an event with a custom delegate type
public delegate void MyCustomEventHandler(object sender, EventArgs e);
public event MyCustomEventHandler SomeCustomEvent;
…相当于:

// declare an event with an existing delegate type
public event EventHandler SomeCustomEvent;
如果您有一些自定义的
EventArgs
类,您可以为您的事件使用通用的
EventHandler

class MyCustomEventArgs : EventArgs
{
    // you custom stuff here
}

public event EventHandler<MyCustomEventArgs> SomeCustomEvent;
类MyCustomEventArgs:EventArgs
{
//你在这里定制东西吗
}
公共事件事件处理程序SomeCustomEvent;

所有事件都是委托类型(它们都继承自
EventHandler
,后者继承自
多播委托
,后者从
委托
中插入)。不过,有时(或者我更愿意说大多数时候)不需要为事件声明自己的自定义委托。您可以使用现有代理,只要它们与事件的签名匹配。随着.NET Framework 2.0中
EventHandler
的引入,对自定义事件委托的需求几乎消失了(只要遵循框架的事件设计)。因此,请执行以下操作:

// declare an event with a custom delegate type
public delegate void MyCustomEventHandler(object sender, EventArgs e);
public event MyCustomEventHandler SomeCustomEvent;
…相当于:

// declare an event with an existing delegate type
public event EventHandler SomeCustomEvent;
如果您有一些自定义的
EventArgs
类,您可以为您的事件使用通用的
EventHandler

class MyCustomEventArgs : EventArgs
{
    // you custom stuff here
}

public event EventHandler<MyCustomEventArgs> SomeCustomEvent;
类MyCustomEventArgs:EventArgs
{
//你在这里定制东西吗
}
公共事件事件处理程序SomeCustomEvent;

NET中的事件是通过委托实现的。 从第一个链接的页面:

事件使类中的对象能够 通知其他对象 碰巧他们也许应该 对……作出反应。[.NET]中的事件基于 在发布服务器-订阅服务器模型上。这个 实现事件的类是 打电话给该事件的发布者。A. subscriber类可以订阅 通过注册 使用 发布的事件

委托类型决定了 生成的事件处理程序的签名 可以在事件中注册


因此发布类定义了订阅类必须实现的委托。当引发事件时,通过委托调用订阅类的方法。处理事件的方法称为事件处理程序。事件是发布事件的类的属性。关键字事件用于维护发布/订阅习惯用法。

NET中的事件是通过委托实现的。 从第一个链接的页面:

事件使类中的对象能够 通知其他对象 碰巧他们也许应该 对……作出反应。[.NET]中的事件基于 在发布服务器-订阅服务器模型上。这个 实现事件的类是 打电话给该事件的发布者。A. subscriber类可以订阅 通过注册 使用 发布的事件

委托类型决定了 生成的事件处理程序的签名 可以在事件中注册


因此发布类定义了订阅类必须实现的委托。当引发事件时,通过委托调用订阅类的方法。处理事件的方法称为事件处理程序。事件是发布事件的类的属性。关键字事件旨在维护发布/订阅习惯用法。

但在第二个示例中,事件是自定义的(不是由控件创建的),它们没有创建委托。它是一个内置委托。BCL中还有一个通用事件处理程序—大量委托可用。Func和Action是我的FAV。但在第二个示例中,事件是自定义的(不是由控件创建的),它们没有创建委托。它是一个内置委托。BCL中还有一个通用的事件处理程序—大量委托可用。Func和Action是我的最爱。