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 17.12.05 18:32 
Hallo!

Ich habe eine Checklistbox, welche dem Nutzer die Möglichkeit geben soll, bestimmte Funktionen ein- bzw. auszuschalten. Jede Funktion in der Checklistbox wird durch eine andere Klasse repräsentiert (bzw. eine Instanz derselbigen), welche alle von derselben Mutterklasse abstammen.

Nun möchte ich, dass beim Start der Anwendung jede Kindklasse einmal instanziert und die Instanz in die Checklistbox gelegt wird, sodass halt jede verfügbare Funktion einmal in der Checklistbox vorkommt. Das soll so flexibel sein, dass ich einfach eine neue Kindklasse schreibe und diese ohne weitere Änderungen am Code ebenfalls in der Checklistbox erscheint.

Was ich also konkret brauche ist eine Liste der Kindklassen. In Delphi habe ich etwas in der Art ja schonmal gemacht, aber ich fürchte, dass das in C# nicht so gehen wird. :?

Jemand 'ne Idee?

Grüße
Christian

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

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Sa 17.12.05 18:44 
In C# (bzw generell .NET) geht es sogar noch einfacher! ;) Hier brauchst du der Mutterklasse nix bekannt geben, sondern nutzt die Möglichkeiten von Reflection - Assembly.GetExportedTypes / Assembly.GetTypes

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
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 17.12.05 18:56 
Super, vielen Dank!

Sieht jetzt so aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
clb_nameparts.Items.Clear();

Type[] someTypes = Assembly.GetAssembly(typeof(Namepart)).GetTypes(); //richtiges Assembly holen

foreach(Type t in someTypes) //Typen durchgehen
  if (t.BaseType == typeof(Namepart)) //richtige Mutterklasse?
  {
    clb_nameparts.Items.Add(Activator.CreateInstance(t, new object[] {ng})); //hinein damit!
  }


Dabei ist Namepart die entsprechende Mutterklasse, die Kindklassen erhalten alle noch ein vorher erstelltest Objekt ng als Parameter im Konstruktor.

Grüße
Christian

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