Der Code ist einfach. Es lädt ein Wörterbuch lazy. Wenn das Wörterbuch nichts ist, füllt es das Wörterbuch.Warum funktioniert in diesem Lazy Loading-Code nicht wie erwartet?
Allerdings, wenn ich durch das Programm gehe, wird der Code innerhalb If _countryDictionary Is Nothing Then
mehrere Male aufgerufen. Ich frage mich, was schief gelaufen ist?
Get
Static _countryDictionary As Generic.Dictionary(Of String, String)
If _countryDictionary Is Nothing Then
_countryDictionary = New Generic.Dictionary(Of String, String)
Dim listOfCountries = fileToCol(COUNTRYCODESFileName)
For Each var In listOfCountries
Dim ar = var.Split({"*"}, System.StringSplitOptions.None).ToList()
_countryDictionary.Add(LCase(ar(0)), UCase(ar(1)))
Next
_countryDictionary.Add("delete", "de")
_countryDictionary.Add("default", "df")
_countryDictionary.Add("pakinmay", "py")
End If
Return _countryDictionary(country)
End Get
Hier ist ein Screenshot von meinem Debugging. Wie Sie sehen, ist es immer noch nichts. Funktionieren statische Schlüsselwörter bei der get-Methode in vb.net anders?
Update: Basierend auf der Antwort scheint es, dass die statische Variable hier für verschiedene Instanzen der Klasse unterschiedlich ist. Ich dachte immer, das Wort static bedeutet, dass die Variable nicht im Heap sondern im Stack oder im Code-Teil ist. Ich schätze, ich liege falsch.
Erstellen Sie mehrere Instanzen der enthaltenden Klasse? Aus [die Dokumentation] (https://msdn.microsoft.com/en-us/library/z2cty7t8.aspx) "Wenn Sie eine statische Variable in einer Prozedur deklarieren, die nicht freigegeben ist, ist nur eine Kopie der Variablen verfügbar * für jede Instanz * der Klasse. " – Mark
Es wird zwischen verschiedenen Aufrufen an Getter geteilt, aber neue Instanz des Wörterbuchs wird für neue Instanz der Klasse erstellt – Fabio
Ah so statisch in Klasse Get-Eigenschaft ist anders als statische in normalen Modul. Ich habe dieses Länderwörterbuch in ein Modul verschieben müssen –