tag example c# c#-4.0 dynamic tryinvokemember

tag - summary c# example



Diferencia entre TryInvokeMember y TryInvoke (2)

Esto es parte de la clase 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; } }

Desde MSDN:
TryInvoke : proporciona la implementación para operaciones que invocan un objeto
TryInvokeMember : proporciona la implementación para las operaciones que invocan a un miembro

Quiero saber la diferencia real entre estos dos métodos porque tienen casi la misma sintaxis e implementación. Ya sé que TryInvoke es para métodos o delegados, y TryInvokeMember es para métodos, pero ¿por qué dos métodos para esto? Un buen ejemplo sería apreciado.


La documentación no está muy clara, pero los ejemplos de TryInvoke y TryInvokeMember muestran la diferencia. TryInvoke cuando se invoca el objeto (que lo trata como a un delegado) y se usa TryInvokeMember cuando se invoca un método en el objeto.

El siguiente ejemplo se deriva de los ejemplos de MSDN:

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

Las implementaciones que está mostrando son las mismas porque son implementaciones nulas. Devolver falso significa que el método que intenta ser llamado no está implementado.

Si hubiera una implementación no nula, la diferencia sería que TryInvokeMember examinaría la propiedad binder.Name para determinar qué método se llamaría, mientras que eso no se establecería para TryInvoke .


además

Console.WriteLine (número); // invocará un objeto, y se llama al método TryInvoke