VBによるsingleton
VB6のころからDB接続をラップしたオブジェクトをどう扱おうか悩んでいたのですが、VB2005ではクラス変数が使えるようになりsingletonという考え方を容易に扱えるようになりました。これで1つの解決方法が実現できます。
「singletonとは、唯一の存在を保証するためのパターンで、作成されたインスタンスが唯一存在することを保証します。」
singletonは便利ではありますが、使うにあたって注意が必要なパターンであると考えています。
VBによるsingletonの実装
VB2005でのsingletonの実装例は次のようになります。
Public Class hoge
Private Shared m_instance As hoge
Public Shared Function Singleton() As hoge
If m_instance Is Nothing Then
m_instance = New hoge()
End If
Return m_instance
End Function
End Class
VBによるsingletonの実装その2
上記実装でよいと思っていたのですが、MicrosoftのサイトにC#の例ですが「C# でのシングルトンの実装」というページを見つけました。
上記ページには、上記例では「マルチスレッド環境の場合、安全性が確保されないことです。」と記載されています。
たしかに問題ありそうです。そこで、C#用に公開されている静的な初期化をVB2005用に書き換えてみます。
Public Class hoge
Private Shared ReadOnly m_instance As New hoge
Public Shared Function Singleton() As hoge
Return m_instance
End Function
End Class
この実装方法で問題なさそうですが、私のようにnewしたらdeleteしたくなる人には気持ちが悪いかもしれませんね。