Als Delphi programmeur van huis uit heb ik vrij weinig moeite met C#, maar hier kom ik nu even niet uit... Ook niet na search op GoT, MSDN, Google, enz.
Het probleem is simpel: ik wil een lijst / collection / array / whatever bijhouden van objecten die van elk type (dat ik nodig heb) kunnen zijn. In Delphi zou ik dan een abstract base class maken, met afgeleiden voor elk type dat ik wil gebruiken, en dan een TList afgeleide waar ik die base class in kan proppen.
Maar vorige week kwam ik in aanraking met generics binnen C#, en dat leek me een ideale manier om 't op te lossen zonder al die base class afgeleiden.
Gesimplificeerd voorbeeld van wat ik in gedachten had:
Leuk geprobeerd, maar de compiler meldt op de MyFieldList definitie dat 'ie niet weet wat 'T' is en of ik misschien een reference mis. Idem wanneer ik iets als MyField<T>[] probeer te gebruiken.
Die MyField instances in een List<Object> proppen werkt natuurlijk wel, maar dan blijf je casten als je ook nog 's wat met dat MyField object wilt doen, zelfs als je via reflection uitvogelt wat voor object er nou echt in dat <Object> zit.
Voor mijn gevoel zou dit probleem goed met generics opgelost moeten kunnen worden, maar ik ben nu al een halve dag aan het zoeken hoe...
Het probleem is simpel: ik wil een lijst / collection / array / whatever bijhouden van objecten die van elk type (dat ik nodig heb) kunnen zijn. In Delphi zou ik dan een abstract base class maken, met afgeleiden voor elk type dat ik wil gebruiken, en dan een TList afgeleide waar ik die base class in kan proppen.
Maar vorige week kwam ik in aanraking met generics binnen C#, en dat leek me een ideale manier om 't op te lossen zonder al die base class afgeleiden.
Gesimplificeerd voorbeeld van wat ik in gedachten had:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| public class MyField<T> { private string fieldName; public string FieldName { get { return fieldName; } set { fieldName = value; } } private T fieldValue; public T FieldValue { get { return fieldValue; } set { fieldValue = value; } } } public class MyFieldList : List<MyField<T>> { } |
Leuk geprobeerd, maar de compiler meldt op de MyFieldList definitie dat 'ie niet weet wat 'T' is en of ik misschien een reference mis. Idem wanneer ik iets als MyField<T>[] probeer te gebruiken.
Die MyField instances in een List<Object> proppen werkt natuurlijk wel, maar dan blijf je casten als je ook nog 's wat met dat MyField object wilt doen, zelfs als je via reflection uitvogelt wat voor object er nou echt in dat <Object> zit.
Voor mijn gevoel zou dit probleem goed met generics opgelost moeten kunnen worden, maar ik ben nu al een halve dag aan het zoeken hoe...