Entwickler-Ecke
C# - Die Sprache - In statischer Methode verwendete Klasse herausfinden
Christian S. - Sa 26.11.05 13:08
Titel: In statischer Methode verwendete Klasse herausfinden
Hallo!
Ich versuche momentan ein Programm von Delphi .NET nach C# zu portieren (es werden also noch mehr Fragen von mir kommen ;)). Dabei hänge ich nun an folgender Stelle: Ich habe eine Basisklasse
Namepart, welche folgende Mehtode implementiert:
C#-Quelltext
1:
| public static bool isChecked(CheckedListBox.CheckedItemCollection checkedItems) |
Die Methode soll von einer von
Namepart abgeleiteten Klasse aufgerufen werden und feststellen, ob ein Objekt des Typs der entsprechenden Klasse in den
checkedItems sind. Erster Ansatz wäre ja das hier:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| public static bool isChecked(CheckedListBox.CheckedItemCollection checkedItems) { foreach (object o in checkedItems) if (o.GetType() == return true; return false; } |
Leider scheitere ich dran, den entsprechenden Typ herauszufinden. Es soll, wenn die Methode über eine abgeleitete Klasse aufgerufen wird, auch die abgeleitete Klasse als Typ herauskommen.
Ich hoffe, ich habe mich verständlich gemacht ;-)
Grüße
Christian
P.S.: Ich habe schon gedacht, jeder Klasse eine statische Methode
GetTypezu geben, welche den Typ zurückliefert. Aber um sicherzugehen, dass die auch in jeder Klasse implementiert wird, müsste ich sie in
Namepart abstrakt machen. Leider dürfen statische Methdoden in C# wohl nicht abstrakt sein. :?
Robert_G - Sa 26.11.05 13:14
In C# ist man hier auf Reflection angewiesen:
MethodInfo.GetCurrentMethod().DeclaringType;
Versuche daher den Wert möglichst in einen Cache zu packen, da das so lahm wie fast alles im Reflection namespace ist. ;)
Reflection ist halt cool, aber lahm. :?
Edit:
Christian S. hat folgendes geschrieben: |
P.S.: Ich habe schon gedacht, jeder Klasse eine statische Methode GetTypezu geben, welche den Typ zurückliefert. Aber um sicherzugehen, dass die auch in jeder Klasse implementiert wird, müsste ich sie in Namepart abstrakt machen. Leider dürfen statische Methdoden in C# wohl nicht abstrakt sein. :? |
Geht auch schlecht. Virtuelle, statische Methoden benötigen zwangsläufig MetaClasses. MetaClasses gibt es aber in plain .Net nicht und somit auch nicht in C#.
Oh Mann, das hätte ich mir nochmal anschauen müssen. Erstens wollte ich ReflectedType nehmen, aber das bringt auch nix, weil statics nicht auf dem Typen aufgerufen werden, den du im Code stehen hast, sondern auf den, in dem sie deklariert sind.
Bin halt ein MetaClass verwöhnter Noob...
Christian S. - Sa 26.11.05 13:41
Robert_G hat folgendes geschrieben: |
In C# ist man hier auf Reflection angewiesen: MethodInfo.GetCurrentMethod().DeclaringType;
Versuche daher den Wert möglichst in einen Cache zu packen, da das so lahm wie fast alles im Reflection namespace ist. ;)
Reflection ist halt cool, aber lahm. :? |
Leider liefert mir das immer
Namepart (also die Basisklasse) zurück.
Robert_G hat folgendes geschrieben: |
Geht auch schlecht. Virtuelle, statische Methoden benötigen zwangsläufig MetaClasses. MetaClasses gibt es aber in plain .Net nicht und somit auch nicht in C#. |
Schade, die kann man nämlich oft ganz gut gebrauchen.
Christian S. - Di 13.12.05 10:29
Ich habe die Methode "isChecked" jetzt so umgeschrieben, dass ich ihr den Typ übergebe, auf den gepürft werden soll. Ist nicht schön, aber scheint in C# leider nicht anders zu gehen. :?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!