我使用工具将C#转换为VB。当我在VB中运行程序时,我收到以下错误:
无法使用具有返回类型的委托类型声明事件。
如何更正此代码?
C#:
using System;
[assembly: CLSCompliant(true)]
namespace Link.API
{
public delegate decimal DecimalStringDelegate(string s);
public delegate long OrderDelegateStatus(Order o);
public delegate void LongDelegate(long val);
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Link.API
{
public interface TLServer
{
event LongDelegate newOrderCancelRequest;
event OrderDelegateStatus newSendOrderRequest;
string ClientName(int clientnum);
bool SymbolSubscribed(string sym);
Basket AllClientBasket { get; }
}
}
VB.NET:
Imports System.Text
Imports System.Collections.Generic
Imports System
<Assembly: CLSCompliant(True)>
Namespace Link.API
Public Delegate Function DecimalStringDelegate(ByVal s As String) As Decimal
Public Delegate Function OrderDelegateStatus(ByVal o As Order) As Long
Public Delegate Sub LongDelegate(ByVal val As Long)
End Namespace
Namespace Link.API
Public Interface Server
Event newOrderCancelRequest As LongDelegate
Event newSendOrderRequest As OrderDelegateStatus
Function ClientName(ByVal clientnum As Integer) As String
Function SymbolSubscribed(ByVal sym As String) As Boolean
ReadOnly Property AllClientBasket() As Basket
End Interface
End Namespace
答案 0 :(得分:6)
正如错误所暗示的那样,VB不支持使用具有返回类型的委托的事件。因此,您无法直接转换代码 。一种解决方法是将委托更改为使用ByRef
参数:
Public Delegate Sub DecimalStringDelegate(ByVal s As String, ByRef retVal as Decimal)
Public Delegate Sub OrderDelegateStatus(ByVal o As Order, ByRef retVal As Long)