Лучший способ в vb.net использовать дженерики для My.Settings Storysance?

StackOverflow https://stackoverflow.com/questions/4312971

Вопрос

Можете ли вы улучшить этот общий?

Я пытаюсь уменьшить раздутие кода, уменьшить ошибки и упростить код, используя дженерики. В этом случае я применяю дженерики к объявлению о постоянных свойствах. Постоянность реализуется 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. Использует my.settings для устойчивости
  2. Уменьшает код, стоящий за раздуточением от Getters и Setters
  3. Уменьшает ошибки кодирования
  4. Привязываемый
  5. Реализует InotifiyPropertChanged

Недостатки

  1. Нужно добавить «.value» к свойствам.
  2. Нужно указать имя свойства.
  3. Класс должен находиться в том же проекте, что и My.Settings Dercararations.
Это было полезно?

Решение

Я только что перенес это из 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