2013-07-30 5 views
1

У меня есть класс, который выглядит следующим образом:Создание триггеров, связанных с переменными

Public Class LumberPiece 
    Public boardLength As Double 
    Public currentLeftEndPosition As Double 
    Public currentRightEndPosition As Double 

    Public Sub New(ByVal bl As Double, ByVal clp As Double) 
     boardLength = clsDimension.ConvertInchesToMillimeters(bl) 
     currentLeftEndPosition = clsDimension.ConvertInchesToMillimeters(clp) 
     currentRightEndPosition = clsDimension.ConvertInchesToMillimeters(clp + bl) 
    End Sub 
End Class 

Я хочу, чтобы как-то триггер, который вычисляет currentRightEndPosition каждый раз, что currentLeftEndPosition изменяется (rightEnd всегда равна leftend + boardLength).

как я могу это сделать?

+1

Я не знаю точный синтаксис VB, но то, что вы хотите сделать, это замените эти общедоступные переменные общедоступными * свойствами *, которые используют * частные * переменные. (Это хорошая практика в целом, в первую очередь именно в этом вопросе.) Внутри свойства вы можете иметь бизнес-логику в ответ на установку (или даже получение) значения. Конструктор, скорее всего, по-прежнему будет использовать частные переменные напрямую, но любой внешний доступ к публичным свойствам будет вызывать логику. – David

ответ

2

Вы можете сделать это, используя свойства. Создавая свойства полей, вы можете контролировать, что происходит, когда значения свойств считываются и когда они установлены. Например:

Public Class LumberPiece 
    Public Property BoardLength As Double 

    Public Property CurrentLeftEndPosition As Double 
     Get 
      Return _currentLeftEndPosition 
     End Get 
     Set(value As Double) 
      _currentLeftEndPosition = value 
      CurrentRightEndPosition = clsDimension.ConvertInchesToMillimeters(_currentLeftEndPosition + BoardLength) 
     End Set 
    End Property 
    Private _currentLeftEndPosition As Double 

    Public Property CurrentRightEndPosition As Double 

    Public Sub New(ByVal bl As Double, ByVal clp As Double) 
     BoardLength = clsDimension.ConvertInchesToMillimeters(bl) 
     CurrentLeftEndPosition = clsDimension.ConvertInchesToMillimeters(clp) 
    End Sub 
End Class 

В качестве альтернативы, вы можете выбрать, чтобы вычислить поле каждый раз при обращении к нему:

Public Class LumberPiece 
    Public Property BoardLength As Double 
    Public Property CurrentLeftEndPosition As Double 

    Public ReadOnly Property CurrentRightEndPosition As Double 
     Get 
      Return clsDimension.ConvertInchesToMillimeters(CurrentLeftEndPosition + BoardLength) 
     End Get 
    End Property 

    Public Sub New(ByVal bl As Double, ByVal clp As Double) 
     BoardLength = clsDimension.ConvertInchesToMillimeters(bl) 
     CurrentLeftEndPosition = clsDimension.ConvertInchesToMillimeters(clp) 
    End Sub 
End Class 
Смежные вопросы