質問
クラス内に多くのコードを書いて、プロパティを互いに同期させることができます。私はクラスのイベントについて読んだことがありますが、私が探しているもののためにそれらを機能させる方法に頭を包むことができませんでした。ここでアドバイスを使用できます。
たとえば、これで私はいつも維持したい myColor
どんな変更でも最新の状態 Red
, Green
また Blue
プロパティ。
Class myColors
Private Property Red As Byte
Private Property Green As Byte
Private Property Blue As Byte
Private Property myColor As Color
Sub New()
myColor = Color.FromArgb(0, 0, 0)
End Sub
Sub ChangeRed(ByVal r As Byte)
Red = r
myColor = Color.FromArgb(Red, Green, Blue)
End Sub
Sub ChangeBlue(ByVal b As Byte)
Blue = b
myColor = Color.FromArgb(Red, Green, Blue)
End Sub
End Class
それらの変更の1つ以上が必要な場合、私は望んでいます myColor
更新されます。上記のように十分に簡単ですが、これを自動的に行うイベントを操作する方法がありますので、私は置く必要はありません myColor = Color.FromArgb(Red, Green, Blue)
すべてのサブルーチンで?
解決
あなたの場合、イベントは有用ではありません。
イベントは、他の人のコードがコードに基づいて行動する方法として使用されます。あなたがあなたのコードがしていることについて世界に伝えることができるように、あなたはイベントを作るでしょう。色が何らかの形で変更されるたびに上げることができる色のイベントを変更できますが、これはあなたの利益のためではなく、クラスを使用して何かをしたいときに単純に使用されます。色が変更されます。
イベントは、内部クラス管理用ではなく、外部コード用です。私の前の人が言ったように、あなたが抱えている問題は、2つの方法を解決できるカプセル化の問題です。
1)あなたがしているように何かが変更されるたびに内部変数を更新します。しかし、私はあなたがしているように色を再計算するColorChanged()と呼ばれる内部プライベート関数を作成することをお勧めします。色が変更されたときにもっとロジックが必要な場合は、3か所で変更することを心配する必要がないため、後で路上で機能すると言います。
2)色がrequsted(私の前の人のように)を更新します。アクセスするたびに色を計算するプロパティを作成します。これは最も単純で、ほとんどの場合、完璧に機能します。しかし、そのプロパティをたくさん使用する場合、これらのすべての再作用はパフォーマンスの問題になる可能性があります(この場合、色を計算することはそれほど集中ではないため、問題ではありません)。
この場合、小さなパフォーマンスの欠点にもかかわらず、簡単にするためにオプション2を実行します...そして、私は小さなパフォーマンスの欠点を意味します...
他のヒント
このシナリオでは、なぜMyColorプロパティをこれに変更しないのですか:
Private ReadOnly Property myColor As Color
Begin Get
Return Color.FromArgb(Red, Green, Blue)
End Get
End Property
このようにして、常に同期します。
赤、緑、青のクラス変数を廃止し、すべての値をカラーオブジェクトに処理させます。 MyColor.r、または.g、または.bを呼び出して、後で値を読みたい場合は、必要なコンポーネントを取得できます。 MyColorオブジェクトはすでにR、G、およびBを格納しているため、情報を複製することはありません。