Laden...

Methode aus einer DLL überschreiben mit Reflection?

Letzter Beitrag vor 13 Jahren 12 Posts 2.718 Views
Methode aus einer DLL überschreiben mit Reflection?

Hallo Leute,

hat jemand ein Beispiel, wie man mit Reflection eine Methode einer DLL überschreibt?

Danke und Gruß,
Oliver

Mit Reflection überschreibt man nichts sondern man holt sich damit Informationen über Objekte und deren Aufbau.

Und was genau meinst du mit überschreiben? Du willst das sich eine Methode in einer Assembly anders verhält als vom Author vorgesehen?

Lg XXX

Genau, die Methode soll eine andere Funktion erhalten.

Dachte das man mit Hilfe von Reflection eine Methode auch überscchreiben kann aber gut zu wissen. Hast du da ein Beispiel?

Dachte das man mit Hilfe von Reflection eine Methode auch überscchreiben kann

nein. geht nicht.

Hast du da ein Beispiel?

für was? Dafür das es nicht geht? Solange die Methode nicht "virtual" ist, hast du keine Chance. Evtl kann man das eine oder andere noch mit einem Wrapper abhandeln aber dafür gibt es auch größere Einschränkungen.

Das geht entweder über IL Rewriting oder nen Proxy.

Ein Proxy hat die selben Einschränkungen wie ein Wrapper. IL Rewriting wäre eine Möglichkeit, hat aber ebenfalls viele Dinge, die zu beachten sind und unter Umständen auch die eine oder andere Einschränkung... und ist meistens illegal.

Keine Sorge ich will nichts illegales machen.

Mir geht es darum, dass eine Methode nur den Dateinamen entgegennimmt und dann einen FileStream daraus erzeugt. Mein Ziel ist es einen FileStream direkt zu übergeben, da keine Datei vorhanden ist, die übergeben werden kann.

Gibts dafür Ansätze?

Gibts dafür Ansätze?

Nein.

Das einzige was du machen kannst, ist eine temporäre Datei zu erzeugen und diese zu übergeben.

Du leitest einfach von der Klasse ab. Baust dann für die Überladung die du haben möchtest eine neue Funktion und baust darin die andere Funktion nach. Da kann es dann ggf. nötig sein per reflection private mehtoden aufzurufen. Am besten im Reflector nachgucken was die Funktion macht.

Grüße
Nils

Das setzt vorraus, das du
A: erben darfst
B: Die methode nicht auf andere interne Dll Funktionalität verwendet und auch in Zukunft nicht tun wird
C: Wenn Reflection im Spiel ist, muss man bei Änderungen an der internen Funktionalität der DLL auch den eigenen Code anpassen.
usw..

Ja natürlich; Diesen Punkten muss man sich bewusst sein. Eine temporäre Datei anzulegen kann aber auch massive Probleme (Performance) mit sich bringen, je nach dem was man tut.

Grüße
Nils

Ich verstehe nicht, was genau du erreichen willst. Je nachdem gibt es noch andere möglichkeiten.

Mir geht es darum, dass eine Methode nur den Dateinamen entgegennimmt und dann einen FileStream daraus erzeugt. Mein Ziel ist es einen FileStream direkt zu übergeben, da keine Datei vorhanden ist, die übergeben werden kann.

Meinst du File.OpenRead oder was genau?

Daran verstehe ich nicht:

Mein Ziel ist es einen FileStream direkt zu übergeben,

An die Methode? als Rückgabewert der Methode?

da keine Datei vorhanden ist, die übergeben werden kann.

wie kann eine datei übergeben werden? als Dateiname? als filestream? Willst du den Zugriff auf eine andere Datei umleiten?

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!