我想了解(由于单纯的好奇心),当一个事件处理方法在.NET.Net何时分配事件处理程序方法来控制事件?
被分配到该事件在这个例子中,假设我们有一个ASP网页表单,WebForm1的一个按钮,Button1的。默认情况下,当我们向页面添加一个按钮时,.NET/VS允许我们定义一个在WebForm1类中单击按钮时运行的方法。我有兴趣知道它在幕后做了什么。
我知道这是事件和委托我的这里发生了什么如下理解的事:
当我们创建的ASP项目的新Web窗体,.NET声明它作为一个新的类,从页面类继承;
public partial class WebForm1 : System.Web.UI.Page
{
}
我可以添加一个按钮,页面和.NET创建按钮对象的实例(虽然,在设计文件)
public partial class WebForm1 : System.Web.UI.Page
{
protected Button Button1;
}
我可以声明运行按钮时的方法被点击
public partial class WebForm1 : System.Web.UI.Page
{
protected Button Button1;
protected void Button1_Click(object sender, EventArgs e)
{
Debug.WriteLine("Button clicked");
}
}
那么背后发生了什么事情让我得到这个功能开箱即用?
System命名空间定义了一个EventHandler,它是一个委托;
public delegate void EventHandler(object sender, EventArgs e);
按钮类有此委托
public event EventHandler Click;
和某处 Button1_Click的方法被分配在Button1的
到Click事件这将是沿着
东西线的一个实例Button1.Click += Button1_Click;
我的问题是,这发生在哪里?
这是发生在WebForm1类中的东西吗?
编辑
正如其他人所说,有一些标记,我忘了提如下:
<asp:Button ID="Button1" runat="server" Text="Button" />
此外,由mybirthname和This Resource提到的,这是我自从发现,如果我决定改变
AutoEventWireup="true"
到
AutoEventWireup="false"
有一些地方我可以自己做这个任务。
.NET/VS会在哪里做这个事情,AutoEventWireUp是真的,它似乎没有在项目的任何地方生成任何代码?
通常情况下(至少在WinForms和Xaml中),这发生在函数InitializeComponent中。由于这是一个部分类,请尝试寻找另一个.cs文件,如'* .design.cs',可以存储这些东西。 – CShark
你的标记是什么样的?你有没有像''? –
CodeCaster
了解ASP.NET与WinForms和其他桌面平台完全不同。由于网络应用程序的不连贯性,Web应用程序必须使用巧妙的技巧来假装他们正在以事件驱动的方式工作。如果您有兴趣了解那些肮脏的细节,请阅读关于后期支持的信息。 – dotNET