我在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版本不起作用吗?谢谢:))
答案 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
关键字