【问题标题】:How to use delegates如何使用委托
【发布时间】: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 函数。我在此描述中遗漏了什么?

标签: vb.net delegates


【解决方案1】:

在您的情况下使用 select 语句对您更好。委托不是必需的。例如:您可以使用委托来调用另一个线程当前正在使用的方法以进行安全编码。

【讨论】:

  • 啊,我的错。目前用c#编码,所以让我很困惑。更新了答案。
猜你喜欢
  • 2013-11-26
  • 2019-10-07
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 2016-02-10
相关资源
最近更新 更多