カスタム クラスのメンバーは、My.Settings に保存されることになっている場合、クラス自体と同じ要件に従うことを認識しています。これらの要件の 1 つは、クラス (およびそのすべてのメンバー) に空のコンストラクターがあることです。ここで、いくつかのフォント設定を保存する必要があります。ドキュメントによると、フォントには空のコンストラクターがありません。論理的には、Font 型メンバーを含むクラスは My.Settings に保存できません。
これまでのところ、とても悪い。ただし、何らかの理由で、Font オブジェクトの値を My.Settings に直接保存できることに気付きました。カスタムクラスで使用しようとした System.Drawing.Font と同じであることを確認しました。
私の2つの質問は次のとおりです。
これはどのように/なぜ可能ですか?
Font が可能な My.Setting であることについて私が書いたことを考えると、Fontの独自の実装 [または必要なプロパティを備えたもの] を作成せずに、Font 型のメンバーを持ち、クラスを保存する方法はありますか?
これをGoogleで調べてみましたが、役に立ちませんでした。My.Settings/serialisation のドキュメントもあまり役に立ちませんでした。
編集:これが私のカスタムクラスのコードです:
<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