2009-09-20 15 views

risposta

7

Bene, sarebbe necessario essere virtual per poterlo sovrascrivere (scrivendo un tipo dinamico che eredita dalla classe), e non si può avere un private virtual (non ha senso). Potresti forse ignorare uno internal virtual, ma sospetto che anche questo potrebbe avere problemi di sicurezza. Alla fine, direi di no.

1

Non utilizzando Reflection. È necessario utilizzare una sorta di AOP.

5

Non utilizzando Reflection da solo. Forse il meglio che puoi fare è usare Reflection, combinato con Reflection.Emit o CodeDom per duplicare la classe in un nuovo spazio dei nomi. Quando si incontra il metodo privato che si desidera sostituire, non lo si copia, si emette la sostituzione.

Tuttavia, ci sono molte tecniche che uno sviluppatore può utilizzare per rendere questa tecnica molto, molto più difficile. Rompere l'implementazione della classe in molte classi private o interne è una di queste.

Nota: utilizzando CodeDom, è necessario creare il grafico in memoria, compilarlo e quindi caricare l'assieme risultante.

Questo è probabilmente un MOLTO più problema di quello che vale.

L'altro modo per farlo sarebbe utilizzare Reflector per disassemblare la classe, prendere il codice e creare la propria classe da esso con il metodo replace. Ancora una volta ci sono significativi ostacoli tecnici e legali da superare. Tuttavia potresti imparare molto dal codice smontato.

+0

... o non si può imparare nulla, se il codice è offuscato. –

+2

di si potrebbe imparare che un codice è offuscato :-) –

Problemi correlati