C# - Event/EventHandler语法

con*_*att 0 c# events .net-4.0 event-handling

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

public event EventHandler<AddressEventArgs> SaveButtonClick;
Run Code Online (Sandbox Code Playgroud)

我不熟悉这种语法,尤其是事件处理程序旁边的"<>".有人可以解释一下上面的代码吗?

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

//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));
    }
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*son 5

'<>表示这EventHandler是一种泛型类型.如果您在我建议您阅读本文之前从未接触过仿制药:

C#泛型简介

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

一种非常常用的泛型是List<T>类型.它类似于一个数组,但有一个灵活的大小(你不需要重新申报其大小),你有方便的方法,如Add(),Remove(),RemoveAt(),等于是一个List<int>可以存储你想然而,许多整数和List<MyClass>对象将用于存储MyClass对象的集合.