Определение тела метода C # во время выполнения (динамически) - PullRequest
1 голос
/ 17 января 2011

У меня есть базовый класс, который определяет (среди прочего) определенный пустой виртуальный метод (используемый в качестве обработчика событий).

До настоящего времени все экземпляры создавались из производного типа, который переопределяет виртуальный метод, чтобы наполнить его жизнью. Этот тип генерируется динамически и делает все, что должен, но мне действительно интересно, позволяют ли Reflection (.Emit) или какие-либо рычаги, которые может предложить инфраструктура .Net, просто изменить тело вышеупомянутого метода.

Есть идеи?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 17 января 2011

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

И если этот метод используется только в качестве обработчика событий, зачем делать его методомсовсем?Просто назначьте сгенерированную функцию непосредственно обработчику событий.

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

0 голосов
/ 17 января 2011

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

0 голосов
/ 17 января 2011

Вместо того, чтобы пытаться заполнить тело метода, почему бы вам просто не передать делегат конструктору?Относительно легко создавать делегаты динамически (например, с DynamicMethod.CreateDelegate), и вам не нужно беспокоиться об изменении существующих типов.

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