如何将函数作为参数提供给在VB.NET中获取Object的构造函数?

时间:2015-05-05 16:55:22

标签: c# .net vb.net syntax

我在C#中有一个类需要在VB中重新实现。这里只有构造函数是相关的,它看起来像这样:

socket = io.connect('localhost:3010');
        socket.on('startGame', function () {
            console.log('ShouldStartGame');
            this.createActualGame();
        }.bind(this));

此版本有效。好吧,我的VB.NET版本没有。它看起来像这样:

public RelayCommand(Action<object> execute) : this(execute, DefaultCanExecute) { }
public ActionCommand(Action<object> exec, Predicate<object> canExec)
{
    //stuff...
}

DefaultCanExecute是一个私有布尔函数,没有params总是返回true。

当我在C#中尝试这个时,它可以工作:

Public Sub New(ByVal execute As Object)
    Me.New(execute, AddressOf DefaultCanExecute)
End Sub

Public Sub New(ByVal execute As Action(Of Object), ByVal canExec As Predicate(Of Object))
    'stuff...
End Sub

在VB中,以下操作失败:

var Foo = new ActionCommand(Bar);

VB中的Sub看起来像这样:

Dim Foo As VariantType = New RelayCommand(Bar)

为了完整性而使用C#版本:

Private Sub Bar(ByVal obj As Object)
    'stuff...
End Sub

有人知道为什么VB版本不起作用吗?谢谢:))

2 个答案:

答案 0 :(得分:0)

VariantType是一个枚举,你不能将你的RelayCommand类强制转换为枚举。

使VB版本等同于C#change

Dim Foo As VariantType = New RelayCommand(Bar)

Dim Foo = New RelayCommand(Bar)

答案 1 :(得分:0)

这在VB.NET中对我来说很好用

Public Sub New(ByVal execute As Action(Of Object))
    MyClass.New(execute, AddressOf DefaultCanExecute)
End Sub

Public Sub New(ByVal execute As Action(Of Object), 
               ByVal canExec As Predicate(Of Object))
    'stuff...
End Sub

然后像这样使用:

Private Sub Bar(ByVal obj As Object)
    'stuff...
End Sub

Dim Foo As New RelayCommand(AddressOf Bar)

如果您希望传递函数(指向函数的指针)作为参数使用AddressOf关键字