Frage

Ich finde, dass ich eine Menge Code in meinen Klassen schreiben Eigenschaften miteinander synchron zu halten. Ich habe über Ereignisse in Klassen lesen, haben aber nicht in der Lage gewesen, meinen Kopf herum zu wickeln, wie sie Arbeit zu machen, was ich suche. Ich konnte einige Ratschläge hier verwendet werden.

Zum Beispiel, in diesem ich will immer myColor mit jeder Änderung auf dem neuesten Stand halten, was auch immer in einem oder alle der Red, Green oder Blue Eigenschaften.

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

Wenn ein oder mehr diese Veränderungen, ich will myColor aktualisiert werden. Leicht genug, wie oben, aber ist es eine Möglichkeit, mit den Ereignissen Arbeit, die dies automatisch tun würde, also muß ich nicht myColor = Color.FromArgb(Red, Green, Blue) in jedem Unterprogramm setzen?

War es hilfreich?

Lösung

In Ihrem Fall Ereignisse sind nicht sinnvoll.

Die Ereignisse werden als eine Möglichkeit für andere Leute Code verwendet auf Ihren Code zu handeln. Sie würden ein Ereignis machen, so dass Sie die Welt über etwas sagen könnte Ihr Code tut. Sie könnten ein Ereignis für Farbe machen geändert, dass Sie jedes Mal, wenn die Farbe geändert wird in someway erhöhen können, aber das wäre nicht zu Ihrem Vorteil und würde einfach von einem anderen Teil des Codes verwendet werden, die Ihre Klasse verwendet, und will etwas tun, wenn die Farbe geändert wird.

Veranstaltungen sind für die Außen Code, nicht für die interne Klasse-Management. Da die Person vor mir gesagt, das Problem, das Sie haben, werden mehr von einem Verkapselung Problem ist, können Sie zwei Wege lösen:

1) aktualisieren interne Variable jedes Mal etwas wie Sie verändert tun. Aber ich schlage vor, dass eine interne private Funktion namens ColorChanged (), die die Farbe wird neu berechnet, wie Sie tun. Ich sage eine Funktion, weil später auf der Straße, wenn Sie mehr Logik, wenn die Farbe geändert wird, wollten würden Sie sich keine Sorgen machen muss darüber an 3 Stellen zu ändern.

2) aktualisieren, wenn die Farbe, wenn es requsted ist (wie die Person vor mir). Machen Sie eine Eigenschaft, die die Farbe berechnet es jedes Mal zugegriffen wird. Dies ist die einfachste und in den meisten Fällen funktioniert perfekt. Aber wenn Sie diese Eigenschaft A LOT verwenden dann all diese recaclculations könnten ein Leistungsproblem sein (in diesem Fall die Farbe der Berechnung ist nicht sehr intensiv, so spielt es keine Rolle).

In diesem Fall würde ich Option tun 2 der Einfachheit halber trotz der winzigen Leistung Nachteil ... und ich winzige Leistung bedeuten Nachteil ...

Andere Tipps

In diesem Szenario, warum würden Sie nicht Ihre myColor Eigenschaft ändern, dies zu sein:

Private ReadOnly Property myColor As Color
  Begin Get
    Return Color.FromArgb(Red, Green, Blue)
  End Get
End Property

So ist es immer synchron sein wird.

Ich würde mit den Klassenvariablen für Rot, Grün und Blau tun weg, und habe einfach die Farbe Objektanfasser alle Werte. Sie können myColor.R nennen, oder .G oder .B Sie die gewünschte Komponente zu erhalten, wenn Sie später die Werte lesen möchten. Das myColor Objekt bereits speichert R, G und B, also keinen Grund, die Informationen zu duplizieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top