Разница между TryInvokeMember и TryInvoke
Это часть класса 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, если для объектов или делегатов, и TryInvokeMember для методов, но почему два метода для этого? Хороший пример будет оценен.
Ответы
Ответ 1
Документация не совсем понятна, но примеры для TryInvoke и TryInvokeMember показывают разницу. TryInvoke
вызывается при вызове объекта (который обрабатывает его как делегат), а 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 означает, что метод, который пытается быть вызванным, не реализован.
Если бы существовала непустая реализация, разница заключалась бы в том, что TryInvokeMember
рассмотрит свойство binder.Name
, чтобы определить, какой метод будет вызываться, в то время как это не будет установлено для TryInvoke
.
Ответ 2
также
еЫп (число);//вызывается объект, а метод TryInvoke называется