Autor Beitrag
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 26.11.05 13:08 
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:
ausblenden 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
    public static bool isChecked(CheckedListBox.CheckedItemCollection checkedItems)
    {
      foreach (object o in checkedItems)
                    if (o.GetType() == //thisType
          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. :?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Robert_G
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416


Delphi32 (D2005 PE); Chrome/C# (VS2003 E/A, VS2005)
BeitragVerfasst: 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:
user profile iconChristian 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...


Zuletzt bearbeitet von Robert_G am Sa 26.11.05 13:41, insgesamt 1-mal bearbeitet
Christian S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 26.11.05 13:41 
user profile iconRobert_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.

user profile iconRobert_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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Christian S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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. :?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".