C # - Event / EventHandler синтаксис - PullRequest
0 голосов
/ 30 января 2011

В моей книге ASP.NET .NET 4 я вижу следующий синтаксис:

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

Ответы [ 2 ]

5 голосов
/ 30 января 2011

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

Введение в дженерики C #

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

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

0 голосов
/ 30 января 2011

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

...