Private Shared _twolettercountryCodeDict As Generic.Dictionary(Of String, String)
Private Function twolettercountrycode() As String
If _twolettercountryCodeDict Is Nothing Then
_twolettercountryCodeDict = New Generic.Dictionary(Of String, String) From {{"ty", "turkey"}, {"py", "pakinmay"}, {"ra", "romania"}, {"vm", "vietnam"}, {"bl", "brazil"}, {"et", "egypt"}, {"ka", "korea"}}
Dim listOfCountries = fileToCol(COUNTRYCODESFileName)
For Each var In listOfCountries
Dim ar = var.Split({"*"}, System.StringSplitOptions.None).ToList()
_twolettercountryCodeDict.Add(LCase(ar(1)), UCase(ar(0)))
Next
End If
Return _twolettercountryCodeDict(Me.twoletter.ToLower)
End Function
Hier bin ich mit Private Shared _twolettercountryCodeDict As Generic.Dictionary(Of String, String)
Wie kann der Gültigkeitsbereich einer freigegebenen Variablen eingeschränkt werden, so dass nur auf eine Funktion zugegriffen werden kann?
Das ist, weil ich das _twolettercountryCodeDict für das gesamte Programm gemeinsam nutzen möchten. Ich implementiere im Grunde Lazy Loading. Ich will nicht, dass ein Teil des Codes, der eine Textdatei liest und Ländercodes auffüllt, immer wieder gemacht wird.
Die Sache ist, wenn ich es als Private Shared deklariere, können andere Methoden in der gleichen Klasse auch auf diese Variable zugreifen. Das ist kein großes Problem, aber ich will es vermeiden.
Wenn ich die Variable innerhalb der Funktion als statisch deklariere, wird das twolettercountryCodeDict nicht freigegeben.
So bin ich in einem Dilemma. Was ist die Lösung?
Sagen wir einfach, dass twolettercountrycode ein privates Mitglied erfordert, also kann es keine geteilte Funktion sein. Aber ich möchte, dass _twolettercountryCodeDict nur vom Twolettercountrycode geteilt und zugänglich ist. Kann ich das tun?
Deklarieren Sie eine schreibgeschützte Private Shared-Eigenschaft, die den Wert einer Private-Variable zurückgibt, die Sie in der Funktion festlegen. – Tibrogargan
Das ist die perfekte Lösung. –