这是DynamicObject类的一部分:

public class DynamicObject : IDynamicMetaObjectProvider
{
    ...
    public virtual bool TryInvoke(InvokeBinder binder, object[] args, out object result)
    {
      result = (object) null;
      return false;
    }
    ...
    public virtual bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
    {
      result = (object) null;
      return false;
    }
}

从MSDN:TryInvoke:为调用对象的操作提供实现TryInvokeMember:为调用成员的操作提供实现

我想知道这两种方法之间真正的的区别,因为它们的语法和实现几乎相同。我已经知道TryInvoke是用于对象或委托(delegate),而TryInvokeMember是用于方法,但是为什么要使用两个方法呢?一个很好的例子将不胜感激。

最佳答案

文档尚不清楚,但是TryInvokeTryInvokeMember的示例显示了区别。调用对象时将TryInvoke调用(将其视为委托(delegate)),而调用对象上的方法时则使用TryInvokeMember

下面的示例来自MSDN示例:

dynamic number;
....
// Invoking an object.
// The TryInvoke method is called.
number(2, "Two");

// Calling a method
// The TryInvokeMember method is called.
number.Clear();

您显示的实现是相同的,因为它们都是空实现。返回false表示未实现尝试调用的方法。

如果存在非null的实现,则不同之处在于TryInvokeMember将检查binder.Name属性以确定将调用哪个方法,而不会为TryInvoke设置该方法。

10-06 13:16