vb.net - VB.NET 中作为参数的委托(delegate)

标签 vb.net delegates lambda log4net

背景故事:我正在使用 log4net处理我正在处理的项目的所有日志记录。可以在几种不同的情况下调用一种特定的方法——一些保证日志消息是错误的,而另一些保证日志消息是警告的。

所以,作为一个例子,我怎么能转

Public Sub CheckDifference(ByVal A As Integer, ByVal B As Integer)
  If (B - A) > 5 Then
    log.ErrorFormat("Difference ({0}) is outside of acceptable range.", (B - A))
  End If
End Sub

进入更多类似的内容:
Public Sub CheckDifference(ByVal A As Integer, ByVal B As Integer, "Some delegate info here")
  If (B - A) > 5 Then
    **delegateinfo**.Invoke("Difference ({0}) is outside of acceptable range.", (B - A))
  End If
End Sub

这样我就可以调用它并将 log.ErrorFormat 或 log.WarnFormat 作为委托(delegate)传递?

我将 VB.NET 与 VS 2008 和 .NET 3.5 SP1 一起使用。此外,我对委托(delegate)们一般来说还很陌生,所以如果这个问题应该用不同的措辞来消除任何歧义,请告诉我。

编辑:另外,我如何在类构造函数中将委托(delegate)初始化为 ErrorFormat 或 WarnFormat?会不会像 myDelegate = log.ErrorFormat 一样简单? ?我想还有更多的东西(请原谅我对这个主题的无知——委托(delegate)确实是我想了解更多的东西,但到目前为止他们还没有让我理解)。

最佳答案

声明您的委托(delegate)签名:

Public Delegate Sub Format(ByVal value As String)

定义您的测试功能:
Public Sub CheckDifference(ByVal A As Integer, _
                           ByVal B As Integer, _
                           ByVal format As Format)
    If (B - A) > 5 Then
        format.Invoke(String.Format( _
        "Difference ({0}) is outside of acceptable range.", (B - A)))
    End If
End Sub

在您的代码中的某处调用您的 Test 函数:
CheckDifference(Foo, Bar, AddressOf log.WriteWarn)

或者
CheckDifference(Foo, Bar, AddressOf log.WriteError)

关于vb.net - VB.NET 中作为参数的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/117623/

相关文章:

ios - 如何让 UITextFieldDelegate.shouldChangeCharactersInRange 触发自定义 inputView?

C++ Lambda 生成的 ASM 代码

ios - 关于 "Declaration is only valid at file scope"

vb.net - 如何在VB.NET中创建新数组?

c# - 为什么使用 Interaction.Shell 方法会出现文件未找到异常?

.net - 调试期间代码更改时 CLR 崩溃 ("Edit and Continue") 后面是 Debug.SetNextStatement

ios - 在不引入紧耦合的情况下在对象之间传递数据?

c++ - C++17 中的 Python 样式装饰器

c++ - 为什么这段代码有 C2784 "could not deduce template argument"错误

wpf - 创建一个允许缩放和平移的 WPF 窗口