あなたはこの一般的なものを改善できますか?My.Settingsの永続性のためにGenericsを使用するVB.Netのベストウェイ?
私はジェネリックを使用して、コードの膨張を減らし、エラーを減らし、コードビハインドを単純化しようとしています。このケースでは、持続可能なプロパティの宣言にジェネリックを適用しています。持続性は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を使用しGetterおよびSetter
- からの肥大化の背後にあるコードは、エラー
- コーディング削減削減バインド可能
- を実装は、プロパティに ".Valueの" を追加する必要が
デメリット
- をINotifiyPropertChanged。
- My.Settingsプロパティ名を文字列定数として指定する必要があります。
- クラスは、My.Settings宣言と同じプロジェクトに存在する必要があります。
私は賛否両論を上回っているとは思っていません。値の要件は面倒なことでしょう。個人的には、私は "MySettings"クラス全体を避け、あなた自身のロールをとっています。私はMSが設定をどのように処理するかは本当に好きではありません – DarinH
オブジェクトを定義し、DataContractシリアライザを使用してシリアライズ/デシリアライズできます。 – DarinH