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

How to pass delegate(C#) to Haxe function?

我想这样做:

c#:

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

哈克斯:

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

生成的 c# 代码要求函数参数为 haxe.lang.Function,但我找不到从委托到 haxe.lang.Function 的转换器。必须要写listener class吗?

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

C#:

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

哈克斯:

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

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

注2 据我所知 cs.system 包中没有 Action_0 。 尽管如此,它还是可以通过以下方式创建:

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