Как реализовать эту новую систему обработчиков событий, которую я хочу изобрести в c #, если не на каком языке? - PullRequest
1 голос
/ 01 ноября 2010

Я задал предыдущий вопрос о всплывающих событиях в .NET Что эквивалентно всплывающим событиям JavaScript в .NET?

, которого нет, как в Javascript.

Кто-то сказал, что это будет связано с производительностью, хотя я не уверен, что у DOM нет проблем с производительностью, почему Winform.

Но, допустим, это правда, тогда я бы хотел создатьнечто среднее между систематической пузырьковой системой, такой как javascript, и несуществующей пузырьковой системой в .NET.

Цель, как всегда, слабая связь.То есть я не хочу, чтобы в моем коде была явная ссылка, такая как использование отправителя или жесткая привязка вызова метода со ссылкой на базового родителя.

Мне бы хотелось просто использовать ключевое слово типа «Вперед»».

Как я мог реализовать такую ​​систему в C #.Если это невозможно в C #, на каких языках я могу это сделать?

Ответы [ 3 ]

1 голос
/ 01 ноября 2010

Если вам нужны перенаправленные события, как в WPF, могу поспорить, что проще переписать ваше приложение в WPF, чем писать собственную структуру событий. Если вам нравятся и другие вещи, такие как двусторонняя привязка данных (посмотрите на MVVM) или улучшенная история настройки макета, вам действительно стоит взглянуть на WPF.

Возможно, вы также можете реализовать перенаправленные события в WinForms. Вам «просто» нужно реализовать излучающую, потребляющую и пузырящую части каркаса.

Я думаю, что ваша основная проблема с реализацией вашей собственной структуры обработки событий заключается в том, что существующие элементы управления не знают, как генерировать или использовать ваши события. У вас нет существующих точек подключения в макете Winforms, где вы можете прикрепить использование события.

1 голос
/ 01 ноября 2010

Вы можете реализовать это самостоятельно. Вам понадобится ваш собственный класс EventManager.

public class EventManager
{
  public void AddEvent(Control control,string eventName,Delegate handler);
  public void RemoveEvent(Control control,string eventName,Delegate handler);
}

этот класс затем использует HashSet и события ControlAdded и ControlRemoved для отслеживания всех элементов управления, на которых вы зарегистрировали событие, и всех их дочерних элементов. А затем подписывает свой собственный помощник-делегат для зарегистрированного события на всех дочерних элементах элемента управления, на котором вы зарегистрировали событие. Затем этот вспомогательный делегат вызывает зарегистрированные события, используя нужные вам правила пузырей.

1 голос
/ 01 ноября 2010

Посмотрите, как создаются события в WPF, включая перенаправленные события. Нет необходимости в новом ключевом слове, просто набор классов направляет события так, как вы хотите.

MFC даже делал подобные вещи в C ++ - без каких-либо «событийных» сюрпризов в C ++ он сам.

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