Überschreiben einer privaten Methode mit Reflection

8

Ist es möglich, eine private Methode zu überschreiben, indem Sie Reflection in .NET 3.5 verwenden?

    
dr. evil 20.09.2009, 19:23
quelle

4 Antworten

7

Nun, es müsste virtual sein, um es zu überschreiben (indem ein dynamischer Typ geschrieben wird, der von der Klasse erbt), und Sie können kein private virtual haben (es ergibt keinen Sinn). Sie könnten vielleicht ein internal virtual überschreiben, aber ich vermute, dass auch dies Sicherheitsprobleme verursachen könnte. Letztendlich würde ich nein sagen.

    
Marc Gravell 20.09.2009, 19:26
quelle
5

Nicht mit Reflection alleine. Vielleicht ist das Beste, was Sie tun können, Reflection zu verwenden, kombiniert mit Reflection.Emit oder CodeDom , um die Klasse in einen neuen Namespace zu duplizieren. Wenn Sie auf die private Methode stoßen, die Sie ersetzen möchten, kopieren Sie sie nicht, Sie geben Ihre Ersetzung aus.

Es gibt jedoch viele Techniken, die ein Entwickler verwenden kann, die diese Technik viel, viel schwieriger machen. Das Brechen der Implementierung der Klasse in viele private oder interne Klassen ist eine solche.

Hinweis: Wenn Sie das CodeDom verwenden, müssen Sie das Diagramm im Speicher erstellen, kompilieren und dann die resultierende Baugruppe laden.

Dies ist wahrscheinlich viel mehr Ärger als es wert ist.

Der andere Weg wäre, Reflektor zu verwenden, um die Klasse zu zerlegen, den Code zu übernehmen und Erstelle deine eigene Klasse daraus mit der Methode replace. Auch hier sind erhebliche technische und rechtliche Hürden zu überwinden. Sie können jedoch viel vom disassemblierten Code lernen.

    
Blue Toque 20.09.2009 19:52
quelle
1

Nicht mit Reflection. Sie müssen eine Art AOP verwenden.

    
Anton Tykhyy 20.09.2009 19:24
quelle
1

Typemock-Isolator soll dies tun können, tut dies aber durch die .NET-Profiler-APIs (laut Roy Osherove in Art of Unit Testing ).

    
TrueWill 21.09.2009 01:18
quelle

Tags und Links