Pergunta

Eu acho que eu escrever um monte de código dentro de minhas aulas para manter propriedades em sincronia uns com os outros.Eu li sobre Eventos em Classes, mas não foram capazes de envolver minha cabeça em torno de como fazê-los trabalhar para o que eu estou procurando.Eu poderia usar alguns conselhos aqui.

Por exemplo, em um presente que eu sempre deseja manter myColor atualizado com qualquer alteração que seja em qualquer ou todos os Red, Green ou Blue propriedades.

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

Se uma ou mais dessas alterações, eu quero myColor para ser atualizado.Fácil o suficiente como acima, mas há uma maneira para trabalhar com eventos que seriam automaticamente fazer isso, então eu não tenho que colocar myColor = Color.FromArgb(Red, Green, Blue) em cada sub-rotina?

Foi útil?

Solução

No caso de eventos não são úteis.

Eventos são usados como uma maneira para que o código de outras pessoas para agir sobre o seu código.Você gostaria de fazer um evento para que você pudesse dizer ao mundo sobre algo que o seu código está fazendo.Você poderia fazer um evento para a cor alterada que você poderia levantar cada vez que a cor é alterada de alguma maneira, mas isso não seria para o seu benefício e seria simplesmente usado por qualquer outro pedaço de código que usa a classe e quer fazer algo quando a cor é alterada.

Os eventos são para fora do código, e não para a classe interna de gestão.Como a pessoa antes de mim, disse, o problema que você está tendo é mais de um encapsulamento problema que você pode resolver de 2 maneiras:

1) Atualização variável interna cada vez que algo é alterado como você está fazendo.Mas eu sugiro fazer um privado interno função chamada ColorChanged() que irá recalcular a cor como você está fazendo.Eu digo faça uma função, porque mais tarde abaixo da estrada, se você queria mais lógica quando a cor é alterada, você não teria que se preocupar em mudar em 3 lugares.

2) Atualização quando a cor quando ele é requsted (como a pessoa antes de mim).Faça uma propriedade que calcula a cor de cada vez que é acessada.Este é o mais simples e, na maioria dos casos, funciona perfeito.Mas se você usar a propriedade de UM MONTE, em seguida, a todos aqueles recaclculations poderia ser um problema de desempenho (neste caso, calcular a cor não é muito intensa, por isso não importa).

Neste caso, eu faria a opção 2 para uma questão de simplicidade, apesar do pequeno desempenho desvantagem...e eu quero dizer minúsculo desempenho inconveniente...

Outras dicas

Nesse cenário, por que você não mudaria sua propriedade MyColor para isso:

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

Dessa forma, sempre estará sincronizado.

Eu gostaria de fazer para fora com as variáveis de classe para Vermelho,Verde e Azul, e simplesmente ter a cor de identificador de objecto de todos os valores.Você pode chamar myColor.R, ou .G, ou .B para obter o componente que você deseja se você quiser ler os valores posteriormente.O myColor objeto já lojas de R,G e B, de modo nenhum ponto em duplicar as informações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top