Ik zit met het volgende probleem:
- Ik heb een abstracte baseclass, zeg "Plugin".
- Ik heb n van A afgeleide classes zeg "PluginA" en "PluginB"
Nu wil ik een static method toevoegen die me wat informatie kan geven over de subclass die ik gebruik (UserMayLoadPlugin). In principe wil ik die code op de base stoppen omdat deze code generiek is. Er is alleen wat specifieke informatie nodig uit de afgeleide class die wat karakteristieke eigenschappen beschrijft (bij static member _IsAdminOnly).
Dat dacht ik op te lossen door aan de base class deze static members toe te voegen en die in de static construtor van de afgeleide classes te vullen. Resultaat wat ik hoopte is dat je van een afgeleide class kan vragen of ie door een bepaalde user geladen kan worden op de volgende manier:
PluginA.UserMayLoad(MyUserType user);
Het werkt echter net iets subtieler dan ik dacht. De static constructor wordt aangeroepen op het moment dat het type voor het eerst gerefereerd wordt. Dit vult het static member op baseclass niveau. Maw. de static method werkt altijd met de informatie die de laatste geinitialiseerde afgeleide class gezet heeft... En dat is niet wat ik wil.
Ik hoop dat de casus duidelijk is... Hoe zou ik dit moeten oplossen? Heeft iemand ervaring met deze structuren die me kan uitleggen hoe je dit hoort op te lossen?
---- edit ----
Ik realiseer me net dat _IsAdminOnly geen goed voorbeeld is... Dat zou je via een afgeleide klasse PluginAdminOnly oplossen. Dan maar het praktijkvoorbeeld: In een database staat of een user toegang heeft tot een plugin. Om de benodigde toegangsrecords te vinden moet bekend zijn wat de "primary key" van de plugin in de database is. Die info heb ik dus nodig: static member _PluginKey.
- Ik heb een abstracte baseclass, zeg "Plugin".
- Ik heb n van A afgeleide classes zeg "PluginA" en "PluginB"
Nu wil ik een static method toevoegen die me wat informatie kan geven over de subclass die ik gebruik (UserMayLoadPlugin). In principe wil ik die code op de base stoppen omdat deze code generiek is. Er is alleen wat specifieke informatie nodig uit de afgeleide class die wat karakteristieke eigenschappen beschrijft (bij static member _IsAdminOnly).
Dat dacht ik op te lossen door aan de base class deze static members toe te voegen en die in de static construtor van de afgeleide classes te vullen. Resultaat wat ik hoopte is dat je van een afgeleide class kan vragen of ie door een bepaalde user geladen kan worden op de volgende manier:
PluginA.UserMayLoad(MyUserType user);
Het werkt echter net iets subtieler dan ik dacht. De static constructor wordt aangeroepen op het moment dat het type voor het eerst gerefereerd wordt. Dit vult het static member op baseclass niveau. Maw. de static method werkt altijd met de informatie die de laatste geinitialiseerde afgeleide class gezet heeft... En dat is niet wat ik wil.
Ik hoop dat de casus duidelijk is... Hoe zou ik dit moeten oplossen? Heeft iemand ervaring met deze structuren die me kan uitleggen hoe je dit hoort op te lossen?
---- edit ----
Ik realiseer me net dat _IsAdminOnly geen goed voorbeeld is... Dat zou je via een afgeleide klasse PluginAdminOnly oplossen. Dan maar het praktijkvoorbeeld: In een database staat of een user toegang heeft tot een plugin. Om de benodigde toegangsrecords te vinden moet bekend zijn wat de "primary key" van de plugin in de database is. Die info heb ik dus nodig: static member _PluginKey.
[ Voor 13% gewijzigd door Kama op 06-11-2007 01:42 ]
drs. Kama