2013-08-01 85 views
1

我目前使用此代碼移動夾鉗:如何使用委託

Public Class ClampSet 
    Public Sub New(ByVal gripL As Single, ByVal gripR As Single, ByVal passAxis As Integer) 
     GripDistanceRight.DimMillimeters = gripL 
     GripDistanceLeft.DimMillimeters = gripR 
     Axis = passAxis 
    End Sub 

    Public GripDistanceRight As clsDimension = New clsDimension() 
    Public GripDistanceLeft As clsDimension = New clsDimension() 
    Public Axis As Integer 

    Public Sub moveClampIn() 
     If (Axis = 1) Then 
      digiouts.MoveLeftClampIn() 
     ElseIf Axis = 2 Then 
      digiouts.MoveMiddleClampIn() 
     ElseIf Axis = 3 Then 
      digiouts.MoveRightClampIn() 
     End If 
    End Sub 
    Public Sub moveClampOut() 
     If (Axis = 1) Then 
      digiouts.MoveLeftClampOut() 
     ElseIf Axis = 2 Then 
      digiouts.MoveMiddleClampOut() 
     ElseIf Axis = 3 Then 
      digiouts.MoveRightClampOut() 
     End If 
    End Sub 
End Class 

我想詳細瞭解面向對象編程,我無法理解的代表。

我想我可以將一個委託作爲參數傳遞給一個move()函數,以便這個類可以提供指定哪個方法(即MoveLeftClampOut())的選項,當我初始化ClampSet目的。

我認爲這將是一個更好的解決方案,因爲我不知道將來我會有多少種不同的clampMove方法,並希望使我的代碼更加靈活。

如果我可以使用委託來更改由move()上的ClampSet對象執行的方法,那麼我的代碼應該如何實現?

P.S.我必須使用別人類提供給我的方法。 (MoveLeftClampIn(),MoveLeftClampOut()等)。

+1

閱讀魔術數字反模式,而你越來越擅長面向對象,壞習慣開始做。 :) – Cortright

+0

@Cortright正是我問這個問題的原因:)我知道它不好,我想做得更好 – jth41

+0

問題是,你*想*你需要代碼在這段代碼中。你不這樣做,他們絕對沒有用處。繼續寫代碼,你會發現他們明顯的需求。就像有一天你會認爲提高事件是有用的。 –

回答

0

對你來說,在你的情況下使用select語句更好。代表是沒有必要的。例如:您可以使用委託來調用另一個線程當前正在使用的方法以進行安全編碼。

+0

它被稱爲在VB代碼中選擇。 –

+0

啊,我的壞。目前編碼在C#中,所以它讓我感到困惑。更新了答案。 – Max