【问题标题】:How do I add a Delegate for AddressOf CalledBack?如何为 AddressOf CalledBack 添加委托?
【发布时间】:2020-05-17 00:24:53
【问题描述】:

尝试一两次添加代表...未成功。

   Public Function CallbackAddress() As Integer
  'UPGRADE_WARNING: Add a delegate for AddressOf CalledBack Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="E9E157F7-EF0C-4016-87B7-7D7FBBC6EE08"'
    CallbackAddress = GetAddress(AddressOf CalledBack)
    End Function

    Private Function GetAddress(ByVal address As Integer) As Integer
        'GetAddress = address
        Return address
    End Function

这是添加代理的失败(不完整或完全错误)尝试:

  Public Delegate Sub CalledBackDelegate(ByVal param As Integer)

  Public Function CallbackAddress() As Integer
        Dim myCalledBackDelegate As CalledBackDelegate = New CalledBackDelegate(AddressOf CalledBack)
        CallbackAddress = GetAddress(myCalledBackDelegate)  // << This doesn't work! 
    End Function

还是报错:

myCalledbackDegate 无法转换为整数。

我错过了什么?

【问题讨论】:

  • CallbackAddress 的返回值是如何使用的?我怀疑这是一个 XY 问题,您真的需要完全删除 CallbackAddress 并用其他东西替换它。它看起来像是用于低级挂钩的东西,可能需要在 .NET 中以完全不同的方式完成。

标签: vb.net delegates vb6-migration


【解决方案1】:

所有三个建议的函数都是返回整数的函数。虽然当然可以有一个返回委托的函数,但有一个返回 fixed 委托的函数将毫无意义。

委托是对函数的引用,用于调用您在调用站点不知道要调用什么方法的函数。现在更常见的是使用 lambda 函数来完成。下面是一个完整的应用程序,它展示了委托和 lambdas(一种特定类型的委托)在今天是如何被普遍使用的。您的示例缺少用法,因此我们无法真正帮助您。希望这有助于澄清这个概念。 (请原谅布局,使用 iPad)。

imports System

Public Module Module1
  Public Sub Main()

    console.Write("Enter a number:")
    Dim x as integer = if(integer.tryparse(console.ReadLine().trim, x), x, x)
    console.Write("Enter another number:")
    dim y as integer = if(integer.tryparse(console.ReadLine().trim, y), y, y)

    console.Write("Enter a plus or minus sign:")

    dim operation = console.ReadLine().Trim()

    dim op as func(Of integer, integer, integer)

    select case operation
        case "+"
            op = addressof add
        case "-"
            op = addressof minus
    end Select
    Dim result = op(x, y)


    console.WriteLine($"Result of {x} {operation} {y} is {result}")

    dim lambda as func(of integer)

    select case operation
        case "+"
            lambda = function() x + y
        case "-"
            lambda = function() x - y
    end select 

    result =lambda()
    console.writeline($"Result of {x} {operation} {y} is {result}")

  End Sub
  public Function Add(x as integer, y as integer) as integer

    return x + y

  end Function

  public function Minus(x as integer, y as integer) as integer
    return x - y
  end function
End Module

【讨论】:

  • 你指的是哪个“用法”?
  • @JamesT.Smith:主要是您尝试分配它的位置以及使用它的位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 2012-01-15
相关资源
最近更新 更多