Я не уверен, существует ли способ избежать зависимостей от того, чтобы быть созданным. Можно найти некоторую информацию здесь как установка copylocal ко лжи и помещению dlls в общем каталоге.
сборка решения для Visual Studio Оптимизации - куда поместить файлы DLL?
Из Руководства по проектированию фреймворка Брэда Абрамса и Кшиштофа Квалины:
Рассмотрите возможность использования подкласса
EventArgs
в качестве аргумента события, если вы не абсолютно уверен, что событию никогда не потребуется переносить какие-либо данные в метод обработки событий, и в этом случае вы можете напрямую использовать типEventArgs
.Если вы отправляете API с использованием
EventArgs
напрямую, вы никогда не сможете добавить какие-либо данные, которые будут переноситься с событием, без нарушения совместимости. Если вы используете подкласс, даже если изначально он был полностью пустым, вы сможете добавлять свойства к подклассу, когда это необходимо.
Лично я думаю, что это сводится к проблеме совместимости. Если вы создаете библиотеку классов для использования другими, я бы использовал подкласс. Если вы используете события только в своем собственном коде, тогда (как сказал Альфред) применяется YAGNI. Если вы перейдете с EventArgs
на собственный производный класс, это будет критическое изменение, но, поскольку это приведет к нарушению только вашего собственного кода, это не такая уж большая проблема.
Я предлагаю придерживаться EventArgs и использовать другую вещь только тогда, когда она вам действительно понадобится.
ОБНОВЛЕНИЕ:
Как указал Адрианбанкс out, если ваш код будет использоваться другим кодом, который не находится под вашим контролем (например, код, который вы не можете скомпилировать самостоятельно) или если перекомпиляция потребительского кода будет проблемой, тогда вы должны использовать EventHandler