2011-01-30 3 views
0

В моем ASP.NET .NET 4 книги, я вижу этот синтаксис:C# - Событие/EventHandler синтаксис

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

Этот синтаксис называется «generics». Взгляните на 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

Другая ссылка: «[Generics (Руководство по программированию на C#)] (http://msdn.microsoft.com/en-us/library/512aeb7t.aspx)« –

5

«<>» s показывают, что EventHandler является обобщенным типом. Если вы никогда не были подвержены генериков, прежде чем я предлагаю вам прочитать эту статью:

An Introduction to C# Generics

В принципе, вы можете думать о родовое как особый класс, который у вас есть возможность указать тип объекта, который вы хотите хранить в нем/иметь это применимо. Как только вы это сделаете, методы и взаимодействие с классом строго типизированы, поэтому вам не нужно бросать вещи или их следует хранить в виде типа object.

Очень распространенный тип List<T>. Он похож на массив, но имеет гибкий размер (вам не нужно повторно объявлять его размер), и у вас есть удобные методы, такие как Add(), Remove(), RemoveAt() и т. Д. Таким образом, List<int> может хранить сколько угодно целых чисел, и объект List<MyClass> будет использоваться для хранения коллекции ваших объектов MyClass.

+1

В принципе, «EventHandler » - (который работает, используя преимущества дженериков, как обсуждалось выше), которые вы можете использовать, чтобы сделать ваш код проще и проще писать. См. [Документация в MSDN] (http://msdn.microsoft.com/en-us/library/db0etb8x.aspx). –

Смежные вопросы