Question

Pouvez-vous améliorer ce générique?

Je suis en train de réduire le code ballonnement, réduire les erreurs et codebehind Simplify par l'utilisation des médicaments génériques. Dans ce cas, je fais une demande de génériques à la déclaration des propriétés persistables. Persistence est mis en œuvre par My.Settings. Voici le code à ce jour.

' 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

Utilisation:

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

Avantages:

  1. Utilise My.Settings pour persistence
  2. Réduit le code derrière ballonnement de accesseurs
  3. réduit les erreurs de codage
  4. Bindable
  5. Met en œuvre INotifiyPropertChanged

Inconvénients

  1. besoin d'ajouter ".Value" aux propriétés.
  2. Nécessité de préciser My.Settings nom de la propriété comme constante de chaîne.
  3. classe doit résider dans un même projet que les déclarations de My.Settings.
Était-ce utile?

La solution

Je viens de Ported ce c# à vb si nous espérons qu'il est approprié:

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

utilisation:

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

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

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top