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

Я не уверен, существует ли способ избежать зависимостей от того, чтобы быть созданным. Можно найти некоторую информацию здесь как установка copylocal ко лжи и помещению dlls в общем каталоге.

сборка решения для Visual Studio Оптимизации - куда поместить файлы DLL?

12
задан Alfred Myers 9 June 2012 в 13:40
поделиться

2 ответа

Из Руководства по проектированию фреймворка Брэда Абрамса и Кшиштофа Квалины:

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

Если вы отправляете API с использованием EventArgs напрямую, вы никогда не сможете добавить какие-либо данные, которые будут переноситься с событием, без нарушения совместимости. Если вы используете подкласс, даже если изначально он был полностью пустым, вы сможете добавлять свойства к подклассу, когда это необходимо.

Лично я думаю, что это сводится к проблеме совместимости. Если вы создаете библиотеку классов для использования другими, я бы использовал подкласс. Если вы используете события только в своем собственном коде, тогда (как сказал Альфред) применяется YAGNI. Если вы перейдете с EventArgs на собственный производный класс, это будет критическое изменение, но, поскольку это приведет к нарушению только вашего собственного кода, это не такая уж большая проблема.

14
ответ дан 2 December 2019 в 06:45
поделиться

YAGNI

Я предлагаю придерживаться EventArgs и использовать другую вещь только тогда, когда она вам действительно понадобится.


ОБНОВЛЕНИЕ:

Как указал Адрианбанкс out, если ваш код будет использоваться другим кодом, который не находится под вашим контролем (например, код, который вы не можете скомпилировать самостоятельно) или если перекомпиляция потребительского кода будет проблемой, тогда вы должны использовать EventHandler .

9
ответ дан 2 December 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: