2009-09-20 2 views

ответ

7

Ну, это должно быть virtual, чтобы можно было переопределить его (написав динамический тип, который наследуется от класса), и вы не можете иметь private virtual (это не имеет смысла). Возможно, вы можете переопределить internal virtual, но я подозреваю, что даже это может привести к проблемам безопасности. Поэтому, в конечном счете, я бы сказал, нет.

1

Не используя Отражение. Вам нужно использовать какой-то АОП.

5

Не используя отражение только. Возможно, лучшее, что вы могли бы сделать, это использовать Reflection в сочетании с Reflection.Emit или CodeDom, чтобы дублировать класс в новое пространство имен. Когда вы сталкиваетесь с частным методом, который хотите заменить, вы его не копируете, вы используете свою замену.

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

Примечание: с помощью CodeDom вам нужно будет построить график в памяти, скомпилировать его и загрузить загрузочную сборку.

Это, вероятно, БОЛЬШЕ больше проблем, чем того стоит.

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

+0

... или вы ничего не узнаете, если код запутан. –

+2

вы могли узнать, что какой-то код запутан :-) –

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