Laden...

Methode aus einer DLL überschreiben mit Reflection?

Erstellt von olimlad vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.702 Views
O
olimlad Themenstarter:in
106 Beiträge seit 2004
vor 13 Jahren
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

1.378 Beiträge seit 2006
vor 13 Jahren

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

O
olimlad Themenstarter:in
106 Beiträge seit 2004
vor 13 Jahren

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?

Gelöschter Account
vor 13 Jahren

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.

F
10.010 Beiträge seit 2004
vor 13 Jahren

Das geht entweder über IL Rewriting oder nen Proxy.

Gelöschter Account
vor 13 Jahren

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.

O
olimlad Themenstarter:in
106 Beiträge seit 2004
vor 13 Jahren

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?

Gelöschter Account
vor 13 Jahren

Gibts dafür Ansätze?

Nein.

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

N
60 Beiträge seit 2010
vor 13 Jahren

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

Gelöschter Account
vor 13 Jahren

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

N
60 Beiträge seit 2010
vor 13 Jahren

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

1.130 Beiträge seit 2007
vor 13 Jahren

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!