在我的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));
}
}
答案 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进行比较