.net 如何在Boo中拦截方法调用?

.net 如何在Boo中拦截方法调用?,.net,boo,intercept,method-missing,.net,Boo,Intercept,Method Missing,Ruby缺少方法,Python缺少getattr。Boo是否提供了我可以用来拦截方法调用的东西 是的,布有 基本上,您实现了iqueckfu,它有三种方法: QuackGet:在获取属性值时调用 设置属性值时会调用QuackSet QuackInvoke:在调用方法时被调用 这里有一个小问题。Boo能否拦截其他对象的方法调用?有点像Groovy对元类所做的。我认为答案是否定的,因为它是静态类型的,但我想确定一下。我不认为你可以用Groovy的方法来完成它,但是你可以使用一个支持iQuickF

Ruby缺少
方法,Python缺少
getattr
。Boo是否提供了我可以用来拦截方法调用的东西

是的,布有

基本上,您实现了
iqueckfu
,它有三种方法:

  • QuackGet
    :在获取属性值时调用
  • 设置属性值时会调用
    QuackSet
  • QuackInvoke
    :在调用方法时被调用

这里有一个小问题。

Boo能否拦截其他对象的方法调用?有点像Groovy对元类所做的。我认为答案是否定的,因为它是静态类型的,但我想确定一下。我不认为你可以用Groovy的方法来完成它,但是你可以使用一个支持iQuickFu的类来包装/修饰另一个类。启用iQueckFu的类可以有一个方法和属性字典来实现expando-behavior。Boo不像groovy那样是真正动态的,您不能在运行时更改类型的定义。如果您将一个变量声明为“duck”,它本质上是一种编译器魔法,可以将该变量转换为针对该对象的后期绑定,如果该对象可用,它将通过iqueckfu。Boo中没有实际的元类。您需要IronRuby或IronPython来获得更像元类的东西。