aardio 文档

aardio 范例: 扩展 .NET 对象

//扩展 .NET 对象
import console.int;
import dotNet;

//引入 .Net 类(这里也可以直接改为 import System)
dotNet.import("System"); 

/*
导入的 .NET 类如果定义名为 "ctor(...)" 的扩展构造函数。
则该函数将在 aardio 构造 .NET 类之前执行。
*/
System.Uri[["ctor(...)"]] = function(netCtor,url,...){

    //在这里可以改动、检测构造参数
    if(!url) error("参数 @1 请指定网址",3);

    //调用真实的构造函数 netCtor 创建对象,该函数成功返回对象,失败返回 null,错误信息
    var obj,err = netCtor(url,...); //返回新的构造参数

    //返回创建的对象
    return obj,err;
} 

/*
在 aardio 中实例化 .NET 类以后,
可自动调用名为 "ctor" 的扩展构造参数(不能拦截构造参数,也不需要返回值)。 
这个函数的参数就是已经创建的 .NET 对象实例。
*/
System.Uri[["ctor"]] = function(this){ //this 参数为已创建的 .NET 对象实例

    /*
    aardio 读写 .NET 对象的成员会触发对象元方法并转换为 .NET 调用。
    如果改用直接下标 [[]] 就可直接读写对象的成员,不会触发元方法也不会解析为 .NET 调用。
    */
    this[["getHostAndHashCode"]] = function(){
        return owner.Host,owner.GetHashCode();
    }   
}

//在 aardio 代码内调用 System.Uri() 创建 .NET 对象会调用 aardio 扩展的构造函数。 
var uri = System.Uri("https://www.aardio.com/test?q=aardio")

//调用 .NET 对象实例的成员函数
console.log( uri.getHostAndHashCode() ); 

Markdown 格式