C# - Event / EventHandler语法

时间:2011-01-30 03:11:11

标签: c# events .net-4.0 event-handling

在我的ASP.NET .NET 4书中,我看到了这种语法:

public event EventHandler<AddressEventArgs> SaveButtonClick;

我不熟悉这种语法,特别是'&lt; &GT;”在事件处理程序旁边。有人可以解释一下上面的代码吗?

本书的完整代码示例如下。

//Declare custom EventArgs to be used
public class AddressEventArgs : EventArgs {
    public AddressEventArgs(string addressLine1, string addressLine2,
    string city, string state, string postalCode) {
        this.AddressLine1 = addressLine1;
        this.AddressLine2 = addressLine2;
        this.City = city;
        this.State = state;
        this.PostalCode = postalCode;
    }
    public string AddressLine1 { get; private set; }
    public string AddressLine2 { get; private set; }
    public string City { get; private set; }
    public string State { get; private set; }
    public string PostalCode { get; private set; }
}

//Code in a user control raising the event on a button click
public event EventHandler<AddressEventArgs> SaveButtonClick;
protected void ButtonSave_Click(object sender, EventArgs e) {
    if (SaveButtonClick != null) {
        SaveButtonClick(this, new AddressEventArgs(TextBoxAddress1.Text,
        TextBoxAddress2.Text, TextBoxCity.Text, TextBoxState.Text,
        TextBoxPostalCode.Text));
    }
}

2 个答案:

答案 0 :(得分:5)

'&lt; &gt;表明EventHandler是泛型类型。如果您在我建议您阅读本文之前从未接触过仿制药:

An Introduction to C# Generics

基本上,您可以将泛型视为一种特殊类,您可以指定要存储在其中的对象类型/适用于它。一旦你这样做,方法和与类的交互是强类型的,所以你不需要强制转换,或者被迫将它们存储为object类型。

一种非常常用的泛型是List<T>类型。它类似于数组,但具有灵活的大小(您不需要重新声明其大小),并且您有方便的方法,如Add()Remove()RemoveAt()等因此,List<int>可以存储您想要的多个整数,并且List<MyClass>对象将用于存储MyClass个对象的集合。

答案 1 :(得分:0)

此语法称为“泛型”。请查看http://msdn.microsoft.com/en-us/library/ms379564(VS.80).aspx以了解该概念的介绍。

在这种特定情况下,过去常说这个事件将使用AddressEventArgs类将细节传递给处理程序。

如果您熟悉旧的.NET事件语法(在存在泛型之前),请查看http://codebetter.com/jpboodhoo/2007/07/11/leveraging-the-eventhandler-lt-t-gt-delegate-more-effectively进行比较