Caller-Class ermittlen?
-
Hi. Simple frage: Wie kirege ich die Klasse heraus (Typ reicht aus..), die eine funktion aufruft (aus einer anderen klasse).
[cs]
class UnknownClass
{
void dosomething() {
Foo.Baz();
}
}static class iClass
{
public static void Baz() {
Console.WriteLine("{0} called me!", ??? );
}
}
[/cs]sollte so was wie "UnknownClass called me!" ausgeben...
Geht das ?
-
In Kurz: Garnicht, untergeordnete Klassen sollten nichts über darüber liegende Klassen wissen.
In lang: Mittels Reflectionmeschanismen wäre soetwas durchaus möglich. - Dazu musst du mal die Suche bei google etc. anstoßen. - Hier möchte ich aber erwähnen, dass untergeordnete Klassen aufgrund der Kapselung keinerlei informationen zu der übergeordneten Klasse haben sollen. Alles andere ist schlechtes Design.
-
Ist nur so, dass ich aus leichen sicherheitsgründen wissen wollte, welche klasse etwas auf der console ausgibt :P. (Parameter übergeben hilf auch nicht viel,...)
-
Warum denn nicht?
-
Was willst du denn genau machen? Ist ein seltsamer Ansatz den du da verfolgst, aber theoretisch mit wenig Aufwand möglich.
Erstelle ein
StackTrace
, hole den vorherigenStackFrame
, hole die Methode zu diesem Frame, hole den Typ, welcher die Methode deklariert.Aber wie gesagt, aktuell rate ich von diesem Vorgehen ab, da es mir sehr seltsam vorkommt, was du eigentlich erreichen möchtest. Erklär doch das Vorhaben etwas genauer und wieso du es brauchst. Womöglich gibt es da bessere Wege.
Grüssli
-
Womöglich gibt es da bessere Wege.
Wie zum Beispiel Permissions oder vielleicht sind auch friend-Klassen / Methoden eine (wenn auch schlechte) Möglichkeit, wenn die gültigen Klassen im vorneherein bekannt sind.
-
Ne. Console/logs.
Jetzt kann eine art plug-in alles mögliche auf der console ausgeben... zB Fehlirformationen oder sonst was. Ist zwar ein kleines hobbyProjekt, kann später aber ernster werden...
-
Wie gesagt für berechtigungen gibt es in .Net: http://msdn.microsoft.com/de-de/library/yaah0wb2(v=VS.80).aspx
-
Bei Plugins sollte man vielleicht auch noch
System.AddIn
erwähnen:
http://msdn.microsoft.com/en-us/magazine/cc163476.aspx
http://msdn.microsoft.com/en-us/magazine/cc700355.aspx
http://blogs.msdn.com/b/clraddins/
http://clraddins.codeplex.com/
usw.Grüssli