如何将委托(C#)传递给Haxe函数?

时间:2015-07-14 01:49:37

标签: haxe

我想这样做:

C#:

class CSharpClass {
    void foo() {
        HaxeClass h = new HaxeClass();
        h.bar( () => {} );
    }
}

HAXE:

@:expose
class HaxeClass {
    public bar(f: Void->Void): Void {
        f();
    }
}

生成的c#代码需要函数参数为haxe.lang.Function,但是我找不到委托给haxe.lang.Function的转换器。我是否必须编写监听器类?

1 个答案:

答案 0 :(得分:2)

您可以使用cs.system.Action_ *。

C#:

class CSharpClass {
   void foo() {
      HaxeClass h = new HaxeClass();
      h.bar(handler);
   }
   void handler(str:String){}
}

HAXE:

class HaxeClass {
   public bar(f: cs.system.Action_1<String>): Void {
      f.Invoke("foobar"); 
   }
}

注1 构建针对.net 2.0(当前默认值),仅构建.net 3.0和.net 4.0时,具有多个参数(Action_1,Action_2等)的操作不可用。

注2 据我所知,cs.system包中没有Action_0。 不过它可以用:

创建
@:native("System.Action")
extern class Action_0 {
    function Invoke():Void;
}