Announcement

Collapse
No announcement yet.

Erbende Klassen herausfinden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Erbende Klassen herausfinden

    hi,

    ich möchte gerne über eine funktion (sei es selbst geschrieben oder am besten noch eine funktion aus der .net-bibliothek) alle erbenden klassen einer vorgegebenen klasse herausfinden.

    hintergrund:
    über eine klasse 'PuzzleCreator' möchte ich alle objekte instanziieren, die von klasse 'Puzzle' erben. natürlich könnte ich hardcoded über eine arraylist z.b. alle klassennamen festhalten, die von klasse 'Puzzle' erben. aber eben das möchte ich nicht. wenn weitere klassen davon erben, möchte ich diese arraylist in klasse 'PuzzleCreator' nicht ändern müssen. das ganze soll dynamisch erfolgen, "closed to modification" wie es so schön heißt.
    da jede erbende klasse in der klassensignatur 'Inherits Puzzle' drin stehen hat, dachte ich mir, wäre das über die schiene viell. möglich. aber alle klassen durchzugehen und den code nach diesen beiden wörtern zu parsen ist von effizienter und eleganter programmierung ja weit entfernt.

    jemand eine idee? bräuchte ne lösung so schnell wie möglich.
    danke schonmal im voraus für die mühe!

    maverick39


    UPDATE:

    jetzt ist mir eingefallen, dass mir dann noch ein stein im weg liegt, sobald ich diese liste habe.

    wenn ich dann sage ...

    For i As Integer = 0 To (puzzleList.Count - 1)
    puzzle = New puzzleList.Item(i)
    ...
    Next


    ... funktioniert das natürlich nicht. geht sowas überhaupt? also die zu instanziierende klasse aus einer variablen auslesen? wenn nicht, was wäre ein workaround?
    Zuletzt editiert von maverick39; 15.04.2007, 16:07.

  • #2
    Hallo maverick39,

    ist schon eine Weile her, aber vielleicht hilfts trotzdem noch:

    Folgende Konstruktion würde Dir da helfen:
    - Eine Singleton Klasse, die Dir die Liste der Puzzle Implementierungen hält
    - Die Basisklasse "Puzzle" mit einem Konstruktor versehen, der als Übergabeparameter einen "System.Object" entgegennimmt
    - Der Puzzle-Basiskonstruktor wird zunächst die Singleton Klasse instanziieren, um dann die übergebene Instanz in der Liste zu speichern
    - Die Implementierungsklassen rufen den Basiskonstruktor explizit auf und übergeben sich selbst (Me)
    - An einer ganz anderen Stelle kannst Du nun jederzeit die Singleton-Klasse ebenfalls instanziieren und deren Liste iterativ durchgehen.

    Aber: Normalerweise zeigt es sich, dass es sich um schlechtes Design handelt, wenn die Basisklasse die Kinder kennen muss. So ganz habe ich den Sinn auch noch nicht verstanden, was Du genau erreichen möchtest damit.

    Viele Grüße
    _ntr_

    Comment

    Working...
    X