首页 > 解决方案 > 为什么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,我想确保这个解决方法是必要的,我没有这样做有事吗。

标签: c#vb.netdynamicobject

解决方案


推荐阅读