Frage

Können Sie verbessern auf diese generische?

Ich versuche, Code aufblasen zu reduzieren, Fehler zu reduzieren und zu vereinfachen Code-Behind durch die Verwendung von Generika. In diesem Fall bin ich Generika Erklärung persistierbar Eigenschaften Anwendung. Persistance wird durch My.Settings umgesetzt. Hier ist der Code so weit.

' 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

Verbrauch:

Public Property Host As New MySettingsProperty(Of  String)("Host")
Host.Value = "127.0.0.1"
Debug.WriteLine(Host.Value)

Vorteile:

  1. Uses My.Settings für persistance
  2. Reduziert Code hinter aufblasen von Getter und Setter
  3. Senkt Codierungsfehler
  4. Bindable
  5. Ernte- INotifiyPropertChanged

Nachteile

  1. Need to append ".Value" auf Eigenschaften.
  2. Need My.Settings Eigenschaftsnamen als String-Konstante angegeben werden.
  3. Klasse müssen in demselben Projekt wie My.Settings Erklärungen befinden.
War es hilfreich?

Lösung

ich portiert diese nur von c# zu vb so hoffentlich ist es geeignet:

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

Und Nutzung:

Debug.WriteLine(SettingsHelper.GetSetting(Function(s) s.Setting1))

SettingsHelper.SetSetting(Sub(s) s.Setting1 = "new value")

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top