vb.netでmy.settingsの持続性にジェネリックを使用する最良の方法は?
-
29-09-2019 - |
質問
このジェネリックを改善できますか?
ジェネリックを使用して、コードの膨らみを減らし、エラーを減らし、CodeBehindを簡素化しようとしています。この場合、私は持続可能な特性の宣言にジェネリックを適用しています。持続性は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)
利点:
- 持続性のために私のセッティングを使用します
- ゲッターとセッターの膨満感の背後にあるコードを削減します
- コーディングエラーが減少します
- バインド可能
- InotifiyPropertChangedを実装します
短所
- プロパティに「.Value」を追加する必要があります。
- my.settingsプロパティ名を文字列定数として指定する必要があります。
- クラスは、my.settings宣言と同じプロジェクトに存在する必要があります。
解決
私はちょうどこれを移植しました c#
に vb
うまくいけば、それが適切であることを願っています:
Module SettingsHelper
Public Function GetSetting(Of TSetting)(ByVal selector As Func(Of My.MySettings, TSetting)) As TSetting
Return selector(My.Settings)
End Function
Public Sub SetSetting(ByVal action As Action(Of My.MySettings))
action(My.Settings)
End Sub
End Module
および使用法:
Debug.WriteLine(SettingsHelper.GetSetting(Function(s) s.Setting1))
SettingsHelper.SetSetting(Sub(s) s.Setting1 = "new value")
お役に立てれば。
所属していません StackOverflow