Laden...

In Objekt auslesen, von welchem Objekt aus es erzeugt wurde

8 Antworten
1,177 Aufrufe
Letzter Beitrag: vor 15 Jahren
In Objekt auslesen, von welchem Objekt aus es erzeugt wurde

Hallo,

ich habe eine eigene Klasse "Device".
Diese wird in unterschiedlichen anderen Klassen immer wieder neu erzeugt.

Gibt es eine Möglichkeit in der Klasse Device selbst auszulesen, welche Klasse die aktuelle Instanz erzeugt hat?

die Nina

du könntest im konstruktor auf den callstack zugreifen und dir den ensprechenden eintrag merken. das ist aber nur zu debugging zwecken zu empfehlen. wenn du sowas für den produktivcode haben willst, dann würde mich der grund interessieren. evtl gibt es da was besseres.

Erste Idee:
Erstell dir ein Interface das alle Klasse implementieren die deine "Device" instanzieren. Dann erstell in deiner "Device" ein Feld mit dem Typ dieses Interfaces und setz es beim instanzieren mit dem Konstruktor. Wenn du aber nur die Art des Erstellers brauchst, kannst du das auch über den Konstruktor mit einem Enum machen...

Bin mir gerade nicht sicher ob das mit Interfaces funktioniert, mit einer "Über"-Klasse aber auf jedenfall!

LG

@empty.at:

dann könnte sich ja jeder der ein "Device" anlegen möchte einfach eine beliebige instanz schnappen, die so ein interface implementiert und das device denkt, das es von dieser erzeugt wurde...

das mit dem enum ist das selbe.

Hallo Jungs, vielen lieben dank schon mal für Eure Mühe!

Der Hintergrund ist folgender: Es gibt eine zentrale Hardware-Datenbank, in die mittels AddIns (=das sind die Klassen die dann "Devices" erzeugen) Gerätedaten importiert werden. Die Daten stammen aus verschiedenen Quellen...

Nun muss ich wissen, welches Device von welchem AddIn (=Quelle) in die Datenbank geschrieben wurde.

Die Klasse "Device" enthält ein Feld "importerName". Dieser soll automatisch auf den Namen der Klasse (bzw. das Addins) gesetzt werden, welches das Device erzeugt hat...

Ich hoffe ihr könnt mir weiterhelfen

die Nina

wenn diese Addins jeweils in einer anderen Assembly sich befinden kannst du diese mit Assembly.GetCallingAssembly() im Konstruktor des Device identifizieren

Ansonsten wenn du vertrauen an diese Addins hast, dann mach noch ein Konstruktor-parameter zum Device wo Addin-Name übergeben wird.

Oh super, vielen Dank. Genau danach hab ich gesucht.

Ich rufe einfach im Konstruktor von Device

Assembly.GetCallingAssembly().Fullname

auf! bin begeistert über die schnelle Hilfe! 😉

//Auch wieder was gelernt...