Ik heb een Generic type, waarbij ik op de generic parameter een constraint leg dat hij van een type moet zijn die ook een generic parameter heeft.
Dus het volgende
Als ik een bar defineer moet dat dus op de volgende manier
Het probleem wat ik hier mee heb is dat de 2e type parameter altijd int moet zijn, en ook niks anders mag zijn. Dan is het toch eigenlijk zinloos om die op te geven? ( Behalve dat het anders niet compiled natuurlijk
)
Immers zou de compiler uit de volgende code alle informatie kunnen halen die hij nodig heeft om de Type parameters te vullen
Dat zou ook haalbaar zijn als ik in mijn constraint een open generic type zou kunnen gebruiken ( Wat niet mag in de huidige specificatie )
Natuurlijk is dit niet altijd voldoende informatie als ik in Bar ook gebruik zou maken van de type parameter van Foo, maar stel dat het alleen een container type is.
Dit zou ik op kunnen lossen door per type parameter van Foo een subclass van Bar te maken
Maar dat is natuurlijk niet echt handig want dan heb je potentieel enorm veel extra classes.
Maak ik nou een denkfout dat de 2e type parameter nutteloos is? En is er mischien nog een andere manier om dit eleganter op te lossen?
Ik hoop dat het een beetje duidelijk is wat ik bedoel
Dus het volgende
C#:
1
2
3
| class Foo<T>{} class Bar<T, T2> where T : Foo<T2> {} |
Als ik een bar defineer moet dat dus op de volgende manier
C#:
1
| Bar bar = new Bar<Foo<int>, int>(); |
Het probleem wat ik hier mee heb is dat de 2e type parameter altijd int moet zijn, en ook niks anders mag zijn. Dan is het toch eigenlijk zinloos om die op te geven? ( Behalve dat het anders niet compiled natuurlijk
Immers zou de compiler uit de volgende code alle informatie kunnen halen die hij nodig heeft om de Type parameters te vullen
C#:
1
| Bar bar = new Bar<Foo<int>>(); |
Dat zou ook haalbaar zijn als ik in mijn constraint een open generic type zou kunnen gebruiken ( Wat niet mag in de huidige specificatie )
C#:
1
| class Bar<T> where T : Foo<> {} |
Natuurlijk is dit niet altijd voldoende informatie als ik in Bar ook gebruik zou maken van de type parameter van Foo, maar stel dat het alleen een container type is.
Dit zou ik op kunnen lossen door per type parameter van Foo een subclass van Bar te maken
C#:
1
| public class BarInt<T> : Bar<T, int> where T : Foo<int> {} |
Maar dat is natuurlijk niet echt handig want dan heb je potentieel enorm veel extra classes.
Maak ik nou een denkfout dat de 2e type parameter nutteloos is? En is er mischien nog een andere manier om dit eleganter op te lossen?
Ik hoop dat het een beetje duidelijk is wat ik bedoel
“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.”