2014-12-05 1 views
0

У меня есть экземпляр, где я использую чужую библиотеку, импортированную как DLL. Я просто хочу изменить только две частные функции в этом классе. Мне очень нравится делать это извне в DLL, поэтому, когда этот другой человек выпускает новую DLL, я могу просто быстро обновить свою DLL и не менять исходный код и не создавать собственную DLL.Как переопределить метод C# в существующей DLL?

Возможно ли это? Могу ли я каким-то образом переопределить несколько частных функций в C# dll извне из DLL?

+1

Можете ли вы рассказать о своем классе? – BradleyDotNET

+0

Я предполагаю, что смогу, да. Но функции, которые я хочу изменить, являются частными. – rygo6

+2

Я был бы очень удивлен, если бы это было возможно. –

ответ

0

Я думаю, вы можете использовать TypeBuilder.DefineMethodOverride. См. Этот вопрос для деталей Is there a way to "override" a method with reflection?.

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

1

Я действительно хотел сделать это снаружи к DLL, так что когда этот другой человек выпускает новую DLL, я могу быстро обновить мой DLL

Подумайте об этом. Допустим, вы успешно перехватываете/переопределяете свои частные функции. Что произойдет, когда следующий выпуск удалит эти функции или изменит их поведение?

Члены обычно являются частными по причине.

Подлинными подходами являются обертывание внешней сборки для управления/абстрактного поведения или переопределение открытых/защищенных членов, предназначенных для наследования.

Вызов частных членов легко с отражением. Изменение их так, чтобы их вызывающие пользователи использовали новую реализацию, более сложны.

и не нужно изменять источник и создавать собственную DLL.

Если вы действительно, действительно нужно сделать это, изменяя источник, вероятно, самый простой подход. * Вы также можете посмотреть на IL weaving, которые могут быть подходящими для этой задачи.

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

* Это предполагает, что у вас есть законный доступ к источнику или разрешено декомпилировать сборку. Это может привести к нарушению положения об обратной конструкции в лицензии, аннулированию контракта на обслуживание и т. Д. Я не юрист.

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

  • Нет связанных вопросов^_^