Sterk getypeerde talen versus zwak getypeerde talen
C# en Java hebben een aantal dingen gemeenschappelijk. Eén daarvan is dat ze beiden sterk getypeerde programmeertalen zijn. Dit betekent dat van iedere variabele wordt geëist dat die tot een type behoort. Eenmaal het type gedefinieerd mag men dit type niet meer wijzigen.
De voorgangers van C# en Java, C en C++ zijn zwak getypeerde talen. Dit betekent dat je wel rapper van type mag veranderen. Men spreekt dan ook van impliciete conversie. Onderstaande code is toegestaan in C en C++, maar niet in C# noch in Java.
In de onderstaande code zie je dat de inhoud van een integer wordt gekopieerd in een variabele van het type float. In C# of Java kan dit alleen als er een expliciete conversie is gedefinieerd.
int a = 5;
float b = a;
Soms spreekt men van dynamisch getypeerde talen in plaats van zwak getypeerde talen. Het dynamische verwijst dan naar de extra mogelijkheden die je hebt. Kijk even naar onderstaande PHP code.

Omdat beide strings met het getal 2 beginnen, gaat PHP hiermee aan de slag en behandelt het de inhoud van de variabelen alsof het cijfers zijn in plaats van tekst.
Waardetypes en referentietypes
In C# , net zoals in Java, zijn er twee types van variabelen : de waardetypes en de referentietypes. Het verschil tussen beide types kan je grofweg vergelijken met het verschil tussen de gewone variabelen en de pointers in C.

Even een vergelijking met de echte wereld. Een gewone variabele kan je vergelijken met een naambord. Als je dit ziet staan, ben je in de gemeente aanbeland.
Hiernaast zie je het naambordje van de NMBS-opstapplaats van Overpelt. Als je dit ziet, ben je inderdaad aan de opstapplaats aangekomen.

Een pointer is te vergelijken met een wegwijzer : die geeft de richting aan, maar je bent er nog niet. Hiernaast zie je de wegwijzer naar Lommel. Je weet dus dat je nog 14 kilometer moet rijden voor je effectief in Lommel bent.
Waarom is het onderscheid tussen deze 2 types nodig ? Dit heeft allemaal te maken met de vraag of je op voorhand kan zeggen hoeveel geheugenruimte een variabele nodig heeft.





