c# - 为什么VB.NET中的动态对象调用TryInvokeMember而不是TryGetMember
问题描述
我正在用 C# 开发一个广泛使用 DynamicObject 的 .dll。
其他 C# 项目中的 .dll 工作正常,但在 VB.NET TryGetMember 中似乎没有被调用。即使成员是属性,也会调用 TryInvokeMember。
这是我的 .dll 中的示例类
namespace MyNamespace
{
class MyDynamicClass : DynamicObject
{
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
//Do stuff with property
}
public override bool TryInvokeMember(InvokeMemberBinder, object[] args, out object result)
{
//do stuff with function
}
}
}
在 C# 项目中,一切都按预期工作:
class Program
{
static void Main(string[] args)
{
dynamic myObj = new MyNamespace.MyDynamicClass();
var getm = myObj.GetMember; //this will call TryGetMember
var invokem = myObj.InvokeMember(); //this will call TryInvokeMember
}
}
在 VB.NET 中,这两行都会调用 TryInvokeMember
Sub Main()
Dim myObj = New MyNamespace.MyDynamicClass()
Dim getm = g.GetMember 'calls TryInvokeMember
Dim invokem = g.InvokeMember() 'calls TryInvokeMember
End Sub
我可以通过简单地在 TryInvokeMember 末尾调用 TryGetMember 来解决我的问题,如果它无法将它作为函数调用,但是由于我以前从未使用过 VB.NET,我想确保这个解决方法是必要的,我没有这样做有事吗。
解决方案
推荐阅读
- python - 如何总结相似的熊猫行
- shell - 从文件中删除它们在另一个文件中存在 2 次或更多次的行
- odoo - ir.cron: "ERREUR: une valeur NULL viole la contrainte NOT NULL de la Colonne « model_id »
- php - 插入数据库表,然后在同一页面中显示该表
- python - 从数据框中绘制并排堆叠的条形图
- visual-studio-2010 - 从 MySQL 抓取数据时,在字典 Visual C++ 中找不到给定的键
- python-3.x - 如何从 bazel py_test 生成 cpp 覆盖率
- python - 如何使用查询参数获取 Django 请求数据
- html - 设置倾斜边距
- vb.net - OCX 控件:在此上下文中无法访问 Sub New(),因为它是“私有”的