Variabelen moet je in .NET altijd netjes typeren.
En ook als het datatype niet in de variablenaam staat (zoals sommige codeerstandaarden voorschrijven), dan weet je het datatype door de ondersteuning van Visual Studio. Niets aan de hand, voor iedereen duidelijk en overzichtelijk.
Maar sinds versie 3.0 is er een manier bijgekomen. Het keyword VAR werd geintroduceerd (niet te verwarren Variant in VB). Deze declaratie wijze wordt veel gebruikt bij Linq queries. Maar ook in andere situaties prima bruikbaar. Nog niets aan de hand. Je declareert een variabele van het type var en je moet hem gelijk initialiseren. Vervolgens doet de compiler net alsof je wel een datatype opgegeven hebt.
Wat er gebeurt, het werkelijke datatype wordt afgeleid van de initialisatie en kan dan natuurlijk niet meer wijzigen. Bij het compileren wordt deze optimalisatie doorgevoerd. Er gebeurt dus niet op runtime.
Zie deze foutmelding:
Met versie 4.0 komt er een derde variant bij, namelijk het keyword Dynamic. Deze zal runtime bepalen van welk type een variabele is en daar naar acteren. Heel handig is situaties waarin je geen Code completion tot je beschikking hebt, zoals het gebruik van COM objecten. Als je, zoals in onderstaand voorbeeld een variabele declareert van het type dynamic, dan zal de compiler (bij de declaratie van een Class) aangeven het werkelijke type at runtime te resolven. Bij een simpele variabele zoals hierboven zal rode krinkeltje verdwijnen.
Wat is het grootste verschil tussen de drie manieren dan? Performance is een verschil, het resolven van een Dynamic op runtime kost uiteraard tijd.
Zie hier mij voorbeeld. Ik heb een MyClass met 2 methoden.
Ik heb een methode, die de drie varianten gebruikt en ik bereken het verstreken milliseconden. Als de twee regels met commentaar slashes zouden voor compiler errors zorgen.
Het resultaat is dan, zoals verwacht. Het gebruik van het dynamic variant kost tijd.
Ik ben benieuwd, hoe vaak dit keyword misbruikt gaat worden.