このジェネリックを改善できますか?
ジェネリックスを使用して、コードの膨張を減らし、エラーを減らし、コードビハインドを単純化しようとしています。この場合、永続プロパティの宣言にジェネリックスを適用しています。永続性はMy.Settingsによって実装されます。これまでのコードは次のとおりです。
' must be defined in same project as My.Settings!
Public Class MySettingsProperty(Of T)
Implements System.ComponentModel.INotifyPropertyChanged
Private m_Name As String
Sub New(ByVal Name As String)
m_Name = Name
End Sub
Sub New(ByVal Name As String, ByVal InitialValue As T)
m_Name = Name
Value = InitialValue
End Sub
Public Property Value As T
Get
Return CType(My.Settings(m_Name), T)
End Get
Set(ByVal value As T)
My.Settings(m_Name) = value
RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs("Value"))
End Set
End Property
Private Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
End Class
使用法:
Public Property Host As New MySettingsProperty(Of String)("Host")
Host.Value = "127.0.0.1"
Debug.WriteLine(Host.Value)
利点:
- 永続性のためにMy.Settingsを使用します
- ゲッターとセッターからの肥大化の背後にあるコードを削減します
- コーディングエラーを減らします
- バインド可能
- INotifiyPropertChangedを実装します
短所
- プロパティに「.Value」を追加する必要があります。
- My.Settingsプロパティ名を文字列定数として指定する必要があります。
- クラスは、My.Settings宣言と同じプロジェクトに存在する必要があります。