# aardio 范例: 在 aardio 中扩展 .NET 对象



```aardio
//在 aardio 中扩展 .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();
	}	
	
	//return this; //可选返回非 null 值以替换原对象
}

//在 aardio 代码内调用 System.Uri() 创建 .NET 对象会调用 aardio 扩展的构造函数。 
var uri = System.Uri("https://www.aardio.com/test?q=aardio")
 
//调用 .NET 对象实例的成员函数
console.log( uri.getHostAndHashCode() ); 
```

