2013-07-30 29 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語法,但你希望做的是什麼用public *屬性*替換那些使用* private *變量的公共變量。 (一般而言,這是一個很好的做法,主要是針對此問題中的問題。)在屬性的內部,您可以擁有業務邏輯來響應設置(甚至獲取)值。構造函數很可能仍然直接使用私有變量,但對公共屬性的任何外部訪問都會調用邏輯。 – 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