Visual Basic ondersteunt twee hoofdmethoden voor het declareren van onveranderlijke waarden — Const en ReadOnly. Const is bedoeld voor compilerconstanten, waarvan de waarde bekend is tijdens de compilatie. ReadOnly staat alleen initialisatie toe op het moment van declaratie of in de constructor en waarborgt onveranderlijkheid tijdens runtime.
Historisch gezien, al sinds VB6 en eerder, maakte dergelijke semantiek het mogelijk om magische getallen te vermijden en vergemakkelijkte het onderhoud. In VB.NET zijn de mogelijkheden uitgebreid met de introductie van ReadOnly voor instantie- en klassevelden.
Als je Const gebruikt voor waarden die tijdens runtime worden bepaald of afhankelijk zijn van externe gegevens, kunnen er fouten ontstaan. Verwrongen zichtbare gebieden leiden ook tot bugs.
Gebruik Const voor eenvoudige onveranderlijke waarden (getallen, strings) die op het moment van compilatie bekend zijn, en ReadOnly voor gevallen waarin de waarde kan worden berekend in de constructor, maar daarna alleen-lezen is.
Codevoorbeeld:
Public Class MathConstants Public Const Pi As Double = 3.1415926535 Public ReadOnly Property UtcCreated As DateTime Public Sub New() UtcCreated = DateTime.UtcNow End Sub End Class
Belangrijke kenmerken:
Kan je Const verklaren voor een waarde die tijdens runtime wordt verkregen (bijvoorbeeld uit een bestand)?
Nee — Const vereist een waarde op het moment van compilatie. Voor runtime-initialisatie moet je ReadOnly gebruiken.
Kan een ReadOnly-veld worden gewijzigd na de constructor?
Nee — wijziging is alleen mogelijk tijdens de initialisatie (of bij declaratie, of in de constructor), daarna is het alleen-lezen.
Moet je Const gebruiken voor float/double getallen bij wiskundige berekeningen?
Ja, als de waarde van tevoren bekend is. Maar bij gebruik in andere assemblies vereist een verandering van de Const-waarde het hercompileren van alle afhankelijke modules, omdat de compiler de waarde direct inbouwt.
Een ontwikkelaar verklaarde Const voor het pad naar een map, die later moest worden gewijzigd in verschillende omgevingen (dev/prod). Als gevolg daarvan moest bij het wijzigen van de map alle projecten die deze Const gebruikten, opnieuw worden opgebouwd.
Voordelen:
Nadelen:
We hebben ReadOnly geïmplementeerd voor paden, geïnitieerd in de constructor met inachtneming van de omgevingsconfiguratie. Waarden zijn gemakkelijk te wijzigen via instellingen zonder dat de gehele applicatie opnieuw moet worden opgebouwd.
Voordelen:
Nadelen: