È possibile eseguire l'override di un metodo privato utilizzando Reflection in .NET 3.5?Sovrascrittura di un metodo privato con Reflection
risposta
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.
Non utilizzando Reflection. È necessario utilizzare una sorta di AOP.
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.
Typemock Isolator si suppone che sia in grado di farlo, ma lo fa tramite .NET profiler APIs (secondo Roy Osherove in The Art of Unit Testing).
- 1. Come si richiama un metodo statico privato mediante reflection (Java)?
- 2. Sovrascrittura di un metodo con un oggetto
- 3. Sovrascrittura di un metodo Java
- 4. Un modo per richiamare un metodo privato?
- 5. metodo Java Reflection getConstructor
- 6. Sovrascrittura del metodo virtuale in tipo con metodo di conversione
- 7. Sovrascrittura del metodo di interfaccia predefinito con metodo astratto
- 8. Come attendere un metodo privato asincrono invocato mediante reflection in WinRT?
- 9. Confondere "l'override un metodo privato"
- 10. RSpec: metodo privato Stub
- 11. Metodo privato inlining
- 12. Sovrascrittura del metodo di invio di XMLHttpRequest
- 13. Metodo di sovrascrittura e parametri opzionali
- 14. Convalida jQuery - Sovrascrittura metodo di convalida nucleo
- 15. Metodo di sovrascrittura con selettore '***' ha tipo incompatibile '****' parse
- 16. Metodo di sovrascrittura Jython con lo stesso nome
- 17. Metodo privato Test unitario con Jasmine
- 18. Richiamo astratto nel metodo reflection di java
- 19. Un metodo nativo può chiamare un metodo privato?
- 20. Sovrascrittura di un metodo setter e ricezione di informazioni
- 21. Metodo di sovrascrittura C# in Runtime
- 22. L'esecuzione di un metodo recuperato da Reflection richiede più tempo?
- 23. Impedire la sovrascrittura di un metodo in C#
- 24. Come forzare la sovrascrittura di un metodo in java?
- 25. Sovrascrittura di un metodo variadic in ogg-c
- 26. Come eseguire un metodo statico privato con parametri opzionali tramite riflessione?
- 27. Firma del metodo effettivo utilizzando Reflection
- 28. di override metodo del "privato" in Python
- 29. Errore: tentativo di chiamare il metodo privato
- 30. Reflection per chiamare il metodo generico con parametro espressione lambda
... o non si può imparare nulla, se il codice è offuscato. –
di si potrebbe imparare che un codice è offuscato :-) –