Не удается перегрузить делегат для пользовательского события? - PullRequest
2 голосов
/ 10 декабря 2010

я хочу создать

    public delegate void ValueChangedHandler(int value);
    public delegate void ValueChangedHandler(Object sender, int value);

отказывается: как это сделать или это невозможно?

РЕДАКТИРОВАТЬ: Спасибо за ответ, я понимаю техническую причину, но все же то, что я хочу сделать, имеет смысл с точки зрения выразительности, поэтому я расстроен тем, что .net Framework не имеет способа сделать поэтому.

Ответы [ 4 ]

4 голосов
/ 10 декабря 2010

Вы путаете делегатов и методы ... Методы могут быть переопределены, делегаты не могут.

Делегат - это тип, вы можете объявить переменную типа ValueChangedHandler:

ValueChangedHandler handler;

Если бы вы могли перегрузить делегатов, к какой перегрузке ValueChangedHandler будет относиться этот код?

Перегрузка делегатов просто не имеет смысла ...

1 голос
/ 10 декабря 2010

Поскольку ValueChangedHandler - это не метод, а тип, его нельзя перегрузить - вместо этого вы можете создать новый обработчик событий с другими параметрами.

Обычной практикой также является расширение параметров обработчика событий:

public delegate void EventHandler(object sender, EventArgs e);

Вы можете определить свой собственный класс, расширяющий EventArgs для передачи большего количества данных.

1 голос
/ 10 декабря 2010

Делегат является типом.т.е. если вы создаете делегат, то вы фактически создаете класс, производный от System.Delegate.

public delegate void ValueChangedHandler(int value);

Таким образом, вы создали класс ValueChangedHandler.Итак, еще раз, если вы пишете

public delegate void ValueChangedHandler(int value, int j);

, то это два класса с одинаковыми именами в одном пространстве имен.Так что компилятор не позволит.

1 голос
/ 10 декабря 2010

Я не уверен, что вы можете перегружать делегатов, никогда раньше не видел.

Что бы я предложил, было бы что-то вроде этого:

public delegate void ValueChangedHandler(params object[] list);

Надеюсь, это поможет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...