2011-01-30 73 views
0

在我的ASP.NET .NET 4的书,我看到这样的语法:C# - 事件/事件处理程序的语法

public event EventHandler<AddressEventArgs> SaveButtonClick; 

我不熟悉这个语法,特别是“<>”旁边的事件处理程序。有人可以解释上面的代码吗?

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

//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)); 
    } 
} 

回答

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一个比较

+0

另一个链接是“[泛型(C#编程指南)](http://msdn.microsoft.com/en-us/library/512aeb7t.aspx)” – 2011-01-30 03:25:15

5

的'<>的指示EventHandler是一个通用型。如果你从来没有接触过的仿制药我以前建议你阅读这篇文章:

An Introduction to C# Generics

基本上,你能想到一个通用的作为,你有能力指定要的对象类型的特殊类存储在/它适用于。一旦你这样做,方法和与类的交互是强类型的,所以你不需要投掷东西,或被迫将它们存储为object类型。

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

+1

基本上,`EventHandler 定义的委托(通过利用泛型,如上所述),您可以利用它来使代码更容易编写。请参阅[MSDN上的文档](http://msdn.microsoft.com/zh-cn/library/db0etb8x.aspx)。 – 2011-01-30 10:04:40