Reflection bei statischen Type-Methoden [GELÖST]
Übersicht

![]() |
NoaBetreff: Reflection bei statischen Type-Methoden [GELÖST] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo allerseits,
ich hab' ein Problem, bzw. zumindest meine ich eines zu haben. Wenn ich Reflection bei "normalen" Type-Methoden verwende funktioniert alles wunderbar, versuche ich das ganze allerdings bei einer statischen Type-Methode sieht es anders aus. Vielleicht kann mir ja jemand helfen. Hier ein kleines Beispiel: Code: [AUSKLAPPEN] Type TestType Function Test() Print "doSomething" End Function End Type id:TTypeId = TTypeId.ForName("TestType") met:TMethod = id.FindMethod("Test") met.Invoke(Null, Null) |
||
- Zuletzt bearbeitet von Noa am Fr, Mai 23, 2008 9:39, insgesamt einmal bearbeitet
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Method != Function
Du kannst via Method Iteration keine Functions erhalten. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
TMethod funktioniert nur bei normalen Methoden. Ich finde es macht irgendwie auch keinen Sinn bei statischen Methoden. Wenn du ein Objekt von einem unbekannten Type hast, ist das natürlich sinnvoll. Aber bei statischen Methoden muss man ja sowieso den Type kennen. Dann kann man doch genau so gut einfach Type.Methode() schreiben. Vielleicht helfen dir auch Funktionszeiger weiter? Code: [AUSKLAPPEN] Type TestType
Function Test() Print "doSomething" End Function End Type Local MyFunc() MyFunc = TestType.Test If MyFunc <> Null Then MyFunc() |
||
![]() |
Noa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dankefein ^.^
Auf den Funktions-Zeiger bin ich in dem Moment gar nicht gekommen xD Das wird das Problem lösen. Hintergrund der Angelegenheit ist, dass ich ein event-basiertes System aufbaue d.h. ich muss sowohl Methoden als auch Funktionen "zurückrufen" können ^^" Nochmals danke. |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Problem bei Funktionszeigern ist jedoch, dass sie nicht auf Instanz-Methoden zeigen können, nur auf statische Methoden und Funktionen ausserhalb von Types.
Aber man kann damit trotzdem recht gut Events realisieren ![]() |
||
![]() |
Noa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Löse das so, indem ich einen Delegate-Type erstelle und für jeden speziellen Fall (Instanz, st. Funktion) einen entsprechend geerbten Typ ^^ | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Man nutzt auch nicht functions und methoden im wildwuchs system.
Funktionen haben kein Self, denen musst du die Type Instanz schicken. Methoden haben eine. Von daher ist schon rein deswegen klar, das sie ganz verschiedene zwecke haben. Bis zu 1.26 wo die Reflection rein kam, waren eventhandler nur durch Function Referenzen möglich. Jetz lassen sich richtige Eventhandler einführen indem man den eventhandler (ein objekt mit einer Methode onXY) effektiv zuweisen kann statt irgend einen "hack around" |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Noa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich nutze kein Wildwuchssystem.
Aber es hat wenig Sinn Methoden in einem Typ zu verwenden von dem keine Instanzen erzeugt werden sollen -> statischer Typ. Mit diesen Wrapper-Methoden hab ich vorher auch gearbeitet. - Ich hab nur gehofft, dass auch statische Methoden über Reflection angesprochen werden können, wie das z.B. in Java der Fall ist. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja, wenn du nen typ hast den du nur auf Klassen-, nicht auf Instanzebene nutzt, dann wirds vermutlich auch kein Eventhandler sein und drum auch nicht von einer abstrakten Klasse TEventHandler oder so abgeleitet, wär also wieder nen anderer Mechanismus oder?
Und BM ist nicht Java. Bis 1.26 gabs garkeine Reflection, da waren Function Pointer die einzige möglichkeit dynamische Funktionsverweise zu haben. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Noa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jein, der Event-Handler registriert nur eine statische Methode als Ziel eines Ereignisses in diesem Falle. Der Event-Handler ist also quasi losgelöst von der entsprechenden Ziel-Funktion.
Wenn BMax Java wäre würde ich Java nutzen und nicht BMax, da es aber rein von den Aufrufen für die Erzeugung von Reflections fast identisch war, bin ich zumindest von der Möglichkeit ausgegangen, dass es gehen könnte und genau das wollte ich ja hier in Erfahrung bringen. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ach so, OK
Ansonsten, unter Modules - BASIC - Reflection ist das ganze in MaxIDE dokumentiert. Wie ja oben erwähnt wurde, machts keinen Sinn das sonst was reflektiert wird, denn in BM ist reflektion nur auf Instanzebene und const, global, function sind rein auf klassenebene und erscheinen deswegen da net. Vielleicht in einer künftigen version. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group