public BindInvoke ( |
||
binder | An instance of the |
|
args | An array of |
|
return |
/// <summary> /// Performs the binding of the dynamic invoke operation. /// </summary> /// <param name="target">The target of the dynamic invoke operation.</param> /// <param name="args">An array of arguments of the dynamic invoke operation.</param> /// <returns>The <see cref="DynamicMetaObject"/> representing the result of the binding.</returns> public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { ContractUtils.RequiresNotNull(target, "target"); ContractUtils.RequiresNotNullItems(args, "args"); return(target.BindInvoke(this, args)); }
/// <summary> /// Performs the binding of the dynamic invoke operation. /// </summary> /// <param name="target">The target of the dynamic invoke operation.</param> /// <param name="args">An array of arguments of the dynamic invoke operation.</param> /// <returns>The <see cref="DynamicMetaObject"/> representing the result of the binding.</returns> public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { ContractUtils.RequiresNotNull(target, nameof(target)); ContractUtils.RequiresNotNullItems(args, nameof(args)); return target.BindInvoke(this, args); }
/// <summary> /// Performs the binding of the dynamic invoke operation. /// </summary> /// <param name="target">The target of the dynamic invoke operation.</param> /// <param name="args">An array of arguments of the dynamic invoke operation.</param> /// <returns>The <see cref="DynamicMetaObject"/> representing the result of the binding.</returns> public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { ArgumentNullException.ThrowIfNull(target); ContractUtils.RequiresNotNullItems(args, nameof(args)); return(target.BindInvoke(this, args)); }
/// <summary> /// Tries to perform binding of the dynamic invoke operation. /// </summary> /// <param name="binder">An instance of the <see cref="GetMemberBinder"/> that represents the details of the dynamic operation.</param> /// <param name="instance">The target of the dynamic operation. </param> /// <param name="args">An array of <see cref="DynamicMetaObject"/> instances - arguments to the invoke member operation.</param> /// <param name="result">The new <see cref="DynamicMetaObject"/> representing the result of the binding.</param> /// <returns>true if operation was bound successfully; otherwise, false.</returns> public static bool TryBindInvoke(InvokeBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result) { if (TryGetMetaObject(ref instance)) { result = instance.BindInvoke(binder, args); return true; } else { result = null; return false; } }
public static bool TryBindInvoke(InvokeBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result) { ContractUtils.RequiresNotNull(binder, "binder"); ContractUtils.RequiresNotNull(instance, "instance"); ContractUtils.RequiresNotNull(args, "args"); if (TryGetMetaObject(ref instance)) { // // Demand Full Trust to proceed with the binding. // new PermissionSet(PermissionState.Unrestricted).Demand(); result = instance.BindInvoke(binder, args); return true; } else { result = null; return false; } }
/// <summary> /// Tries to perform binding of the dynamic invoke operation. /// </summary> /// <param name="binder">An instance of the <see cref="InvokeBinder"/> that represents the details of the dynamic operation.</param> /// <param name="instance">The target of the dynamic operation. </param> /// <param name="args">An array of <see cref="DynamicMetaObject"/> instances - arguments to the invoke member operation.</param> /// <param name="result">The new <see cref="DynamicMetaObject"/> representing the result of the binding.</param> /// <returns>true if operation was bound successfully; otherwise, false.</returns> public static bool TryBindInvoke(InvokeBinder binder, DynamicMetaObject instance, DynamicMetaObject[] args, out DynamicMetaObject result) { ContractUtils.RequiresNotNull(binder, "binder"); ContractUtils.RequiresNotNull(instance, "instance"); ContractUtils.RequiresNotNull(args, "args"); if (TryGetMetaObjectInvoke(ref instance)) { result = instance.BindInvoke(binder, args); return true; } else { result = null; return false; } }
public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { ContractUtils.RequiresNotNull(target, "target"); ContractUtils.RequiresNotNull(target, "args"); // there must be only one argument and it is always object[]. // see SplatCallSite.Invoke Debug.Assert(args.Length == 1); Debug.Assert(args[0] != null); Debug.Assert(args[0].Expression.Type == typeof(object[])); // We know it is an array. DynamicMetaObject arg = args[0]; Expression argAsArrayExpr = arg.Expression; object[] argValues = (object[])arg.Value; int argLen = argValues.Length; DynamicMetaObject[] splattedArgs = new DynamicMetaObject[argLen]; ArgumentInfo[] arginfos = new ArgumentInfo[argLen]; for (int i = 0; i < argLen; i++) { Expression argExpr = Expression.ArrayIndex( argAsArrayExpr, Expression.Constant(i) ); splattedArgs[i] = new DynamicMetaObject( argExpr, BindingRestrictions.Empty, argValues[i] ); arginfos[i] = Expression.ByRefArgument(i); } BindingRestrictions arrayLenRestriction = BindingRestrictions.GetExpressionRestriction( Expression.Equal( Expression.ArrayLength( argAsArrayExpr ), Expression.Constant(argLen) ) ); ComInvokeAction invokeBinder = new ComInvokeAction(arginfos); DynamicMetaObject innerAction = target.BindInvoke(invokeBinder, splattedArgs); BindingRestrictions restrictions = target.Restrictions. Merge(arg.Restrictions). Merge(arrayLenRestriction). Merge(innerAction.Restrictions); return new DynamicMetaObject( innerAction.Expression, restrictions ); }
public sealed override DynamicMetaObject Bind(DynamicMetaObject target, DynamicMetaObject[] args) { ContractUtils.RequiresNotNull(target, "target"); ContractUtils.RequiresNotNullItems<DynamicMetaObject>(args, "args"); return target.BindInvoke(this, args); }