【发布时间】:2013-08-01 22:08:35
【问题描述】:
我目前正在使用此代码来移动夹具:
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
我正在尝试了解有关 OO 编程的更多信息,但我无法理解 Delegates。
我认为我可以将委托作为参数传递给 move() 函数,以便此类可以为我提供在初始化 ClampSet 对象时指定我真正想要使用的方法(即 MoveLeftClampOut())的选项.
而且我认为这将是一个更好的解决方案,因为我不知道我将来会有多少不同的clampMove 方法,我将来会有多少,并且想让我的代码更灵活。
如果我可以使用委托来更改 ClampSet 对象在 move() 上执行的方法,那么我的代码应该是什么样的?
附:我必须使用其他人的课程提供给我的方法。 (MoveLeftClampIn()、MoveLeftClampOut() 等)
【问题讨论】:
-
在您擅长 OO 的同时阅读 Magic Number 反模式,这是开始做的坏习惯。 :)
-
@Cortright 正是我问这个问题的原因 :) 我知道这很糟糕,我想做得更好
-
问题是你认为在这段代码中你需要委托。你不知道,它们绝对没有用。继续编写代码,您会发现对它们的明显需求。就像有一天你会认为发起一个活动很有用。
-
我也很好奇为什么你认为你需要代表,就像@HansPassant 一样。你对什么是代表的理解是什么?它们并不复杂,但在您开始使用它们之前很难掌握这个概念。
-
@HansPassant 让我们看看我是否至少对 Delegates 有基本的了解。在上面的代码中,我想让每个 ClampSet 对象执行不同的函数(即 MoveLeftClampIn())所以如果我可以在初始化时将该方法传递给 ClampSet 实例,我可以在不更改 Clampset 类的情况下拥有尽可能多的不同的 clampmove 函数。我在此描述中遗漏了什么?