Ik ben bezig met een project waar ik een aantal Generic classes heb. In een ander project wil ik deze classes gebruiken door middel van reflection. Nu heb ik echter een probleem met het gebruik van de IsSubclassOf methode van Type.
Ik heb bijvoorbeeld de volgende Types
Nu wil ik met reflection alle Subclasses van Base<?> opvragen. Ik dacht dan doe ik het volgende
In java heb je geloof ik iets van een ? zodat je Type parameter onbekend is. Zoiets wil ik eigenlijk in C# ook voor elkaar krijgen. Ik maak verder in mijn code die gebruik maakt van de reflection geen gebruik van de Type parameter dus het is ook niet echt belangrijk om dat te weten.
Weet iemand mischien hoe ik toch op kan vragen of een een class een Subclass is van mijn generic type zonder daarbij op te moeten geven met welke Type parameter de sub class overerft?
Ik heb bijvoorbeeld de volgende Types
C#:
1
2
3
4
| public class Base<T>{} public class SubA : Base<int>{} public class SubB : Base<float>{} |
Nu wil ik met reflection alle Subclasses van Base<?> opvragen. Ik dacht dan doe ik het volgende
C#:
1
2
3
4
5
6
7
| Type[] types = assembly.GetTypes(); foreach( Type type in types ) { type.IsSubClassOf( typeof( Base ) );//Compiler error want geen type mee gegeven type.IsSubClassOf( typeof( Base<> ) );//Compiled wel maar geeft altijd false terug in dit geval type.IsSubClassOf( typeof( Base<?> ) );//Compiler error want ? mag natuurlijk niet } |
In java heb je geloof ik iets van een ? zodat je Type parameter onbekend is. Zoiets wil ik eigenlijk in C# ook voor elkaar krijgen. Ik maak verder in mijn code die gebruik maakt van de reflection geen gebruik van de Type parameter dus het is ook niet echt belangrijk om dat te weten.
Weet iemand mischien hoe ik toch op kan vragen of een een class een Subclass is van mijn generic type zonder daarbij op te moeten geven met welke Type parameter de sub class overerft?
[ Voor 3% gewijzigd door Woy op 13-06-2006 11:37 ]
“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.”