6

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
4

1 に答える 1

6

エラーが暗示しているように、VB は戻り値の型を持つデリゲートを使用するイベントをサポートしていません。したがって、コードを直接変換することはできません。ByRef1 つの回避策は、代わりにパラメーターを使用するようにデリゲートを変更することです。

Public Delegate Sub DecimalStringDelegate(ByVal s As String, ByRef retVal as Decimal)
Public Delegate Sub OrderDelegateStatus(ByVal o As Order, ByRef retVal As Long)
于 2013-03-07T23:00:23.980 に答える