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