Я занимаюсь разработкой .dll в C #, в которой широко используется DynamicObject.
.dll в других проектах C # работает нормально, однако в 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
Я могу решить свою проблему, просто вызвав TryGetMember в конце TryInvokeMember, если он не может вызвать его как функцию, однакопоскольку я никогда раньше не работал с VB.NET, я хотел убедиться, что этот обходной путь необходим, и я не делаю что-то не так.