如何将委托(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;
}
我想这样做:
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;
}