Можете ли вы улучшить этот универсальный?
Я пытаюсь уменьшить раздувание кода, уменьшить количество ошибок и упростить код, используя обобщенные элементы. В этом случае я применяю дженерики для объявления постоянных свойств. Персистентность реализована 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)
Преимущества:
- Использует мои настройки для сохранения
- Уменьшает код раздувания от добытчиков и сеттеров
- Уменьшает ошибки кодирования
- Bindable
- Реализует INotifiyPropertChanged
Недостатки
- Необходимо добавить ".Value" к свойствам.
- Необходимо указать имя свойства My.Settings как строковую константу.
- Класс должен находиться в том же проекте, что и объявления My.Settings.