2010-12-10 2 views
2

я хочу создатьНе удается перегрузить делегат для пользовательского события?

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

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

EDIT: Спасибо за ответ, я понимаю техническую причину, но все же то, что я хочу сделать, имеет смысл с точки зрения выразительности, поэтому я расстроен тем, что .net framework не имеет способа сделать это ,

+0

Делегат просто хранит функции .... вроде как указатель на функцию, но более простая в использовании концепция :) – Machinarius 2010-12-10 12:53:11

+0

Делегат - это тип, как класс. Вы не можете перегружать типы. – 2010-12-10 14:48:55

ответ

1

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

public delegate void ValueChangedHandler(int value); 

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

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

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

1

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

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

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

Надеется, что это помогает,

4

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

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

ValueChangedHandler handler; 

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

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

+0

Правильно. Это похоже на создание двух классов с тем же именем в одном пространстве имен. Делегат - это тип. – decyclone 2010-12-10 17:51:03

1

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

Общей практикой является также расширить paraterers из обработчика событий:

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

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

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