2016-08-01 4 views
0
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 

、私は、プログラム全体のためにその_twolettercountryCodeDictを共有したいと思いますのでですPrivate Shared _twolettercountryCodeDict As Generic.Dictionary(Of String, String)共有変数のスコープを1つの関数でしかアクセスできないように制限する方法はありますか?ここで

を使用しています。私は基本的に遅延読み込みを実装しています。テキストファイルを読み込んだコードの一部に、国コードを繰り返し入力する必要はありません。

プライベート共有として宣言すれば、同じクラスの他のメソッドもその変数にアクセスできます。これはあまり問題にはならないが、私はそれを避けたいと言います。

関数内で変数をstaticとして宣言すると、twolettercountryCodeDictは共有されません。

私はジレンマに陥っています。解決策は何ですか?

2つのレターカウントトレンドコードにはプライベートメンバーが必要なので、共有ファンクションにすることはできません。しかし、私は_twolettercountryCodeDictを共有し、2つのletterscountrycodeからしかアクセスできないようにしたい。私はそうすることができますか?

+0

関数で設定したプライベート変数の値を返す読み取り専用のプライベート共有プロパティを宣言します。 – Tibrogargan

+0

これは完璧な解決策です。 –

答えて

1

これはあなたが求めたことを正確には行いませんが、リソースの読み込みを1回だけ許可するという要件を解決します。リソースをロードするためのクラスにShared Constructorを使用することで、同じことを達成できます。

ReadOnlyDictionaryimplementation)を使用して、発信者が辞書を変更できないようにすることもできます。

Friend Shared ReadOnly Property twolettercountrycode As Generic.Dictionary 
    Get 
     Static _twolettercountryCodeDict As Generic.Dictionary = Nothing 
     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 
    End Get 
End Property 
関連する問題