aardio 文档
aardio 范例: 委托
//委托
//.NET 静态委托回调自动支持 aardio 的回调函数,兼容低版本 .NET 2.0
import dotNet;
var compiler = dotNet.createCompiler("C#");
compiler.Source = /******
namespace CSharpLibrary
{
public class Object
{
//定义一个委托类型
public delegate int TestDelegateType(string str,int a);
//定义一个委托类型字段
public TestDelegateType callback;
//函数与委托的参数、返回值类型要一致
public int TestCall(string str,int a){
return a + 900;
}
//函数参数传入委托
public int Hello(TestDelegateType func)
{
return func("你好",123);
}
//函数返回委托
public TestDelegateType GetTestDelegate( )
{
var n = callback("你好",123);
//函数转换为委托
//return new TestDelegateType(TestCall);
//.NET 2.0 开始支持隐式转换,可以不用再写 new 了。
return TestCall;
}
}
}
******/
compiler.import("CSharpLibrary"); //编译 C# 代码并导入名字空间
var netObj = CSharpLibrary.Object();//创建 .NET 对象
import console;
//函数参数传入委托
netObj.Hello(function(){
//无论.NET 回调是否在同一线程,被 .NET 回调的 aardio 函数总是在原调用线程执行(不必考虑多线程规则与同步)。
console.log("3、aardio 函数被 C# 调用了,参数:",a,b)
return 2; //如果不返回委托指定类型的返回值会导致报错,委托返回值类型为 void 时这里可以不返回值。
})
//委托回调可以直接赋值为 aardio 函数对象
netObj.callback = function(a,b){
console.log("1、aardio 函数被 C# 调用了,参数:",a,b)
return 1;
}
//也可以这样追加委托回调函数
dotNet.delegate.combine(
netObj,"callback",function(a,b){
console.log("2、aardio 函数被 C# 调用了,参数:",a,b)
return 2;
}
)
//获取委托的回调对象数组
var list = netObj.callback.GetInvocationList()
console.log(list[1]);
//调用 C# 函数,可以在返回值里返回 .NET 委托
var resultDelegate = netObj.GetTestDelegate();
//直接调用 .NET 委托。
var ret = resultDelegate("调用函数返回的委托",123);
console.log("调用 C# 委托的返回值",ret);
//通过对像成员获取 .NET 委托对象
var callback = netObj.callback;
//可以在 aardio 中直接调用 .NET 委托对象
callback("测试",123)
//下面这样写是作为对象的成员函数调用,委托字段不是成员函数所以会报错
//netObj.callback("测试",123)
console.pause();
Markdown 格式