Boo メソッドを C# マルチキャスト デリゲートに追加するときにエラーが発生する

StackOverflow https://stackoverflow.com//questions/20047304

  •  26-12-2019
  •  | 
  •  

質問

C# の既存のデリゲートによって通知される必要がある Boo コードを開発しています。のコンストラクターで Boo コンパイル エラーが発生します。 ActionBoo クラス。エラー メッセージと私が試したすべての代替案を参照してください。

# Boo
import System

class ActionBoo:
    def constructor():
        # Alternative #1
        # ActionBoo.boo(9,25): BCE0051: Operator '+' cannot be used with a left hand side of type 'System.Action' and a right hand side of type 'callable(int) as void'.
        ActionCS.action += Boo

        # Alternative #2
        # ActionBoo.boo(13,25): BCE0051: Operator '+' cannot be used with a left hand side of type 'System.Action' and a right hand side of type 'System.Action'.
        ActionCS.action += Action[of int](Boo)

        # Alternative #3
        # This works, but it resets the delegate already set up in C#
        ActionCS.action = Boo

    def Boo(boo as int):
        print 'Boo: ' + boo

actioncs = ActionCS()
actionBoo = ActionBoo()
ActionCS.action(3)

ActionCS マルチキャスト デリゲートを含む既存の C# コードです。元のコードの簡略版は次のとおりです。

// C#
using System;

public class ActionCS
{
    public static Action<int> action;

    public ActionCS()
    {
        action += Foo;
        action += Bar;
    }

    public void Foo(int foo)
    {
        Console.WriteLine("Foo: " + foo);
    }

    public void Bar(int bar)
    {
        Console.WriteLine("Bar: " + bar);
    }

    public static void Main(string[] args)
    {
        ActionCS actioncs = new ActionCS();
        action(5);
    }
}

Linux 上で Mono (v2.10.9-0) と Boo (v0.9.4.9) を使用してコンパイルした方法は次のとおりです。

$ mcs ActionCS.cs
$ mono booc.exe -r:ActionCS.exe ActionBoo.boo

C# コードと Boo の「代替 #3」は、次のように呼び出すことで正常に実行されます。

$ mono ActionCS.exe
Foo: 5
Bar: 5
$ env MONO_PATH=$MONO_PATH:$BOO_HOME/bin mono ActionBoo.exe
Boo: 3

誰かBooコードを修正する方法を知っていますか?

役に立ちましたか?

解決

C# の場合 += は単なる糖衣構文です Delegate.Combine, したがって、おそらく代わりにそれを使用できます。

ActionCS.action = Delegate.Combine(ActionCS.action, Action[of int](Boo))

(特に Boo については何も知らず、.NET 一般についてしか知らないので、これは単なる推測にすぎないことに注意してください)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top