Ik had het laatst met iemand over de generics in C# vs Java. Nou hadden we het er over dat je in java een Super keyword hebt en in C# volgens mij niks vergelijkbaars. In eerste instantie kon ik ook niet zo goed bedenken wanneer je het nou echt nodig zou hebben maar ik ben toch wel benieuwd hoe jullie bijvoorbeeld het volgende stukje aan zouden pakken
Wat ik hier wil doen is dus alle items in mijn collection van T kopieren naar een collection van U. Om dit mogenlijk te maken geef ik aan dat U een superclass van T moet zijn. De constraint die ik opgeef is echter niet toe gestaan in C#. In java zou je voor zo'n geval bijvoorbeeld het super keyword gebruiken.
Op het moment dat je alle classes zelf maakt zou je het natuurlijk gewoon kunnen zorgen dat in ICollection een AddRange methode zit die een ICollection<T> accepteerd. Maar hoe zou je dit oplossen als je die classes niet in je beheer hebt en je wilt toch iets dergelijks doen?
C#:
1
2
3
4
5
6
7
8
9
10
11
12
| public class GenericClass<T> { private ICollection<T> col; public void CopyTo<U>(ICollection<U> collection) where T : U { foreach( T t in col ) { collection.Add(t); } } } |
Wat ik hier wil doen is dus alle items in mijn collection van T kopieren naar een collection van U. Om dit mogenlijk te maken geef ik aan dat U een superclass van T moet zijn. De constraint die ik opgeef is echter niet toe gestaan in C#. In java zou je voor zo'n geval bijvoorbeeld het super keyword gebruiken.
Op het moment dat je alle classes zelf maakt zou je het natuurlijk gewoon kunnen zorgen dat in ICollection een AddRange methode zit die een ICollection<T> accepteerd. Maar hoe zou je dit oplossen als je die classes niet in je beheer hebt en je wilt toch iets dergelijks doen?
“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.”