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.
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?
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?