質問

このジェネリックを改善できますか?

ジェネリックを使用して、コードの膨らみを減らし、エラーを減らし、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)

利点:

  1. 持続性のために私のセッティングを使用します
  2. ゲッターとセッターの膨満感の背後にあるコードを削減します
  3. コーディングエラーが減少します
  4. バインド可能
  5. InotifiyPropertChangedを実装します

短所

  1. プロパティに「.Value」を追加する必要があります。
  2. my.settingsプロパティ名を文字列定数として指定する必要があります。
  3. クラスは、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")

お役に立てれば。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top