我想这样做:
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的转换器。我是否必须编写监听器类?
答案 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;
}