質問

クラス内に多くのコードを書いて、プロパティを互いに同期させることができます。私はクラスのイベントについて読んだことがありますが、私が探しているもののためにそれらを機能させる方法に頭を包むことができませんでした。ここでアドバイスを使用できます。

たとえば、これで私はいつも維持したい 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を格納しているため、情報を複製することはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top