2009-09-20 18 views

Odpowiedz

7

Cóż, musi być virtual, aby można było go przesłonić (pisząc typ dynamiczny, który dziedziczy z klasy), i nie można mieć private virtual (to nie ma sensu). Być może zastąpiłeś internal virtual, ale podejrzewam, że nawet to może mieć wpływ na bezpieczeństwo. Tak więc ostatecznie powiedziałbym "nie".

1

Nie za pomocą refleksji. Musisz użyć jakiegoś AOP.

5

Nie za pomocą samego Odbicia. Być może najlepsze, co możesz zrobić, to użyć Reflection, w połączeniu z Reflection.Emit lub CodeDom, aby skopiować klasę do nowej przestrzeni nazw. Gdy natrafisz na prywatną metodę, którą chcesz zastąpić, nie kopiujesz jej, emitujesz zamiennik.

Istnieje jednak wiele technik, których może użyć programista, co sprawia, że ​​ta technika jest znacznie, dużo trudniejsza. Łamanie implementacji klasy na wiele klas prywatnych lub wewnętrznych jest jednym z takich.

Uwaga: używając CodeDom, musisz zbudować wykres w pamięci, skompilować go, a następnie załadować wynikowy zestaw.

To prawdopodobnie więcej kłopotów niż jest warte.

Innym sposobem na to byłoby użycie Reflector, aby zdemontować klasę, pobrać kod i zbudować własną klasę za pomocą metody replace. Znów istnieją poważne techniczne i prawne przeszkody do przezwyciężenia. Możesz się wiele nauczyć z tego zdemontowanego kodu.

+0

... lub możesz się niczego nie nauczyć, jeśli kod jest zaciemniony. –

+2

z was może się dowiedzieć, że jakiś kod jest zaciemniony :-) –

Powiązane problemy