动态语言运行时(DLR)中的后期绑定与动态对象
1. 后期绑定与互操作性
使用 .NET 反射按名称查找正确的成员属性并非易事。在使用 .NET 反射绑定到静态 .NET 对象的方法时,需要考虑多种情况:
- 方法可能重载,需要编写代码进行方法重载解析。
- 方法可能是扩展方法,需要处理这种情况。
- 方法的一些输入参数可能有默认值。
- 一些参数可能需要按名称而不是按位置匹配。
幸运的是,由于处理 .NET 反射的许多代码在不同语言的绑定器类中是相同的,DLR 提供了一些实用类,如 DefaultBinder ,使我们无需做所有的艰苦工作。以下是使用 DefaultBinder 绑定到静态 .NET 对象的示例代码:
public override DynamicMetaObject FallbackGetMember(DynamicMetaObject target,
DynamicMetaObject errorSuggestion)
{
Console.WriteLine("Doing late binding in SimpleGetMemberBinder.");
DefaultBinder defaultBinder = new DefaultBinder();
return defaultBinder.GetMember(this.Name, target);
}
运行上述增强了绑定逻辑的代码,会看到如下输出:
超级会员免费看
订阅专栏 解锁全文
5

被折叠的 条评论
为什么被折叠?



