Сохранение класса без пустого конструктора в My.Settings напрямую работает, но не как член пользовательского класса?
Мне известно, что к членам пользовательских классов предъявляются те же требования, что и к самому классу, когда они должны быть сохранены в My.Settings. Одним из таких требований является то, что у класса и всех его членов есть пустой конструктор. Теперь мне нужно сохранить некоторые настройки шрифта. У шрифта нет пустого конструктора согласно документации. Логически, мой класс, содержащий члены типа Font, не может быть сохранен в My.Settings.
Пока все так плохо. Однако я заметил, что по какой-то причине можно сохранить значение объекта Font непосредственно в My.Settings. Я подтвердил, что это тот же System.Drawing.Font, который я пытался использовать в своем пользовательском классе.
Мои два вопроса сейчас:
Как / почему это возможно?
Учитывая то, что я написал о том, что Font является возможным My.Setting, есть ли способ иметь член типа Font и сохранять класс, не создавая собственную реализацию Font [или что-то с необходимыми свойствами]?
Я пытался найти это в Google, но безрезультатно. Документация для My.Settings/serialization тоже не сильно помогла.
Изменить: вот код моего пользовательского класса:
<Serializable()> Public Class MyObject
Implements ISerializable
Private _name As String
Private _text As String
Private _font As Font
Public Property Name As String
Get
Return _name
End Get
Set(value As String)
_name = value
End Set
End Property
Public Property Text As String
Get
Return _text
End Get
Set(value As String)
_text = value
End Set
End Property
Public Property Font As Font
Get
Return _font
End Get
Set(value As Font)
_font = value
End Set
End Property
<NonSerialized()> Public Const CurrentDate As String = "something"
<NonSerialized()> Public Const DateSelection As String = "something else"
End Class
А вот код моей ключевой коллекции пользовательских объектов класса:
Imports System.Collections.ObjectModel
<Serializable()> Public Class MyCollection
Inherits KeyedCollection(Of String, MyObject)
Public Sub New()
MyBase.New()
End Sub
Protected Overrides Function GetKeyForItem(item As MyObject) As String
Return item.Name
End Function
End Class