C # 멀티 캐스트 대리자에 BOO 메소드를 추가 할 때 오류가 발생했습니다.

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

  •  26-12-2019
  •  | 
  •  

문제

C #에서 기존 대리인이 통지 해야하는 일부 부호화 코드를 개발하고 있습니다. ActionBoo 클래스의 생성자에서 BOO 컴파일 오류가 발생했습니다. 시도한 모든 대안과 함께 오류 메시지를 참조하십시오.

# 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에서 모노 (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 # in C # +=Delegate.Combine 용 Sourtactic Sugar입니다. 그래서 대신 사용할 수 있습니다 :

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

(특히 Boo에 대해서는 아무 것도 모른다는 것을 알지 못합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top