如何将此C#事件/委托代码转换为VB.NET(2008或2010)
C#到VB.NET这里是相关的C#代码 这是我到目前为止的想法。 C#委托是一个返回布尔结果的函数。因此,我将委托定义和事件声明转换如下如何将此C#事件/委托代码转换为VB.NET(2008或2010),c#,vb.net,c#-to-vb.net,code-conversion,code-translation,C#,Vb.net,C# To Vb.net,Code Conversion,Code Translation,C#到VB.NET这里是相关的C#代码 这是我到目前为止的想法。 C#委托是一个返回布尔结果的函数。因此,我将委托定义和事件声明转换如下 Public Delegate Function AllocHandlerDelegate(ByVal param1 As Integer) As Boolean Public Event evAlloc As AllocHandlerDelegate Visual Studio返回错误消息:“不能使用具有返回类型的委托类型声明事件。” 所以
Public Delegate Function AllocHandlerDelegate(ByVal param1 As Integer) As Boolean
Public Event evAlloc As AllocHandlerDelegate
Visual Studio返回错误消息:“不能使用具有返回类型的委托类型声明事件。”
所以我把它改成了一个SUB,然后像这样完成了翻译*
Namespace MyApp
Public Delegate Sub AllocHandlerDelegate(ByVal param1 As Integer)
Public Interface ILoader
Event evAlloc As AllocHandlerDelegate
Function Load() As Boolean
End Interface
Public Class MyLoader
Implements ILoader
Public Event evAlloc As AllocHandlerDelegate Implements ILoader.evAlloc
Public Function Load() as Boolean Implements ILoad.Load
Try
If Me.evAllocEvent IsNot Nothing AndAlso Not evAlloc(1) Then
Return False
End Try
End Function
End Class
End Namespace
*注意:我已经意识到我不能检查“Event”对象是否为空,而是检查VB内部委托对象*EVENTNAME*事件
然而,对于第二部分,我不知道该怎么办。在那里,我收到以下错误消息:
“Public Event evAlloc(param1为整数)”是一个事件,不能直接调用。使用“RaiseEvent”语句引发事件。
有什么想法吗?!谢谢这是一个VB版本,这些内联函数需要framework 4.0或更高版本
ILoader.evAlloc = Function(rows As Object)
Dim p As Person = TryCast(rows, Person)
If (p.Age And 1) Then
Return 0
Else
Return 1
End If
End Function
抱歉,没有阅读“2010”,您需要使用
yourfunction.yourevent = New eventype(AddressOf yourfunction)
或使用
addhandler
错误信息非常清楚: Public Event evAlloc(param1为整数)“”是一个事件,不能直接调用。使用“RaiseEvent”语句引发事件 这是一个事件,你不能直接呼叫它。改用“RaiseEvent”语句:
RaiseEvent evAlloc(1)
您的事件不能返回值(C#等效值可以),但您可以使用普通委托
Public Delegate Function AllocHandlerDelegate(ByVal param1 As Integer) As Boolean
Public Interface ILoader
Property evAlloc As AllocHandlerDelegate
Function Load() As Boolean
End Interface
Public Class MyLoader
Implements ILoader
Public Property evAlloc As AllocHandlerDelegate Implements ILoader.evAlloc
Public Function Load() as Boolean Implements ILoader.Load
If Me.evAlloc IsNot Nothing AndAlso Not evAlloc(1) Then _
Return False
' Do Stuff '
Return True
End Function
End Class
使用返回值的事件是错误的,因为事件可以有多个订阅者,而您可能不知道将返回哪个值
Public Delegate Function AllocHandlerDelegate(ByVal param1 As Integer) As Boolean
Public Interface ILoader
Property evAlloc As AllocHandlerDelegate
Function Load() As Boolean
End Interface
Public Class MyLoader
Implements ILoader
Public Property evAlloc As AllocHandlerDelegate Implements ILoader.evAlloc
Public Function Load() as Boolean Implements ILoader.Load
If Me.evAlloc IsNot Nothing AndAlso Not evAlloc(1) Then _
Return False
' Do Stuff '
Return True
End Function
End Class