[C#] Automatisch lijst van classes genereren

Pagina: 1
Acties:

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Ik ben op dit moment bezig met een windows applicatie in C#.
Nou kan dit programma afbeeldingen bewerken door middel van ImageOperations. Deze ImageOperations kunnen voor of na elkaar uitgevoerd worden en bewerken allemaal een Image object welke vervolgens doorgegeven wordt. Een decorator pattern zou hier van toepassing kunnen zijn, maar heb ik niet gebruikt :P

Het echte probleem:
Om een operatie toe te voegen kan uit een lijst (combobox) de juiste operatie gekozen worden en dan dmv een knop aan de (bestaande) operaties toegevoegd worden.
Nou zou ik eigenlijk het liefst willen dat deze lijst automatisch gegenereerd kan worden aan de hand van de classes die beschikbaar zijn. Dus ik stel me zoiets voor:
1) class RotateImageOperation registreert zich bij een class ImageOperationList
2) class ComboBoxList roept in zijn constructor ImageOperationList.GetList() aan en krijgt vervolgens alle ImageOperation classes (als een System.Type) met een omschrijving (string).

Nou zou dit kunnen werken met static constructors. MAAR deze worden enkel aangeroepen wanneer een class voor het eerst wordt gebruikt :(

Note: ik kan dus wel met een switch e.d. gaan werken wat ook wel werkt (zoveel operaties zijn er niet), maar vanuit design oogpunt is het niet helemaal fris.

Heeft iemand hier een oplossing voor? Liefst dus iets dat mogelijk is in C# ;)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Waar wou je de decorator op toepassen, op de image of op de operation? (Ik zou zelf gaan om een operation decorator/composition maken). En als we toch op de design pattern toer gaan, een operation kan je dus vergelijken met een Command.

Maar jouw probleem is dat jij dus objecten wilt constructen aan de hand van classes in die list?

Dat is een heel ander probleem dan je in eerste instantie zou denken bij dit topic.

Zo zou ik het in java aanpakken.

java:
Class c = haalUitLijst();
Operation p = (Operation)c.newInstance();

Je zou eventueel ook een factory kunnen gebruiken en dan op basis van een string een operation maken. Dan hoef in je list alleen maar een string te staan. Maar persoonlijk vind ik dit niet zo geweldig. Eventueel zou je ook nog een hele lading factory methods in die list kunnen gooien, die stuk voor stuk een andere operation kunnen maken. Er zijn dus genoeg mogelijkheden :)

[ Voor 38% gewijzigd door Alarmnummer op 20-02-2003 17:06 ]


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Nee, dat is mijn probleem niet. Als ik eenmaal die type heb dan geloof ik wel dat ik daar instanties van kan maken. Dat decorator verhaal moet je maar ff vergeten, dat was meer om aan te geven hoe het ongeveer in elkaar zit.

Mijn probleem is dat ik eigenlijk dit wil. Stel ik wil over 2 maanden een nieuwe ImageOperation toevoegen. Dan moet ik hier een nieuwe class voor schrijven (logisch die de functionaliteit implementeert), maar ik moet tevens in de GUI-laag voor de ComboBox een extra regel schrijven om de nieuwe class te kunnen gebruiken. Deze moet immers zichtbaar zijn in de lijst. Tevens moet er in de eventhandler wanneer een operatie is geselecteerd uit de lijst een extra switch-case komen om de nieuwe classe te construeren.

Wat mooi zou zijn is als ik enkel die nieuwe class hoef te schrijven; deze class 'registreert' zichzelf in een soort globale lijst. En van die globale lijst kan de combobox dan gebruik maken.

Ik hoop dat het nu wat duidelijker is :) Uitleggen is nooit m'n sterkste punte geweest.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je kan gebruik maken van polymorphisme om de operation af te handelen omdat jouw operation voldoet aan een bepaalde interface.

interface Operation{
public void verneukPlaat(Image image);
}

En die classes kan je op 1001 manieren toevoegen aan je systeem. Misschien een directory waar die gecompileerd in staan. Misschien dmv serialzen vanaf een server.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
kan je niet met behulp van reflectie alle objecten uit een assembly lezen en controleren of het ImageOperation is en als dat zo is toevoegen aan de lijst?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

En je hoeft verder niets aan de gui laag te doen als je bv werkt met een model, bv de OperationList. Hieraan voeg je een extra operation toe en dan wordt het wel zichbaar in de gui.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Ja ok, ik ga nu gewoon een static list maken die alle ImageOperation classes (+ omschrijving) teruggeeft. De combobox kan deze lijst dan gewoon aanroepen.
Bedankt allen :)
Pagina: 1