public override bool TryInvokeAuxMember(string name, BindingFlags invokeFlags, object[] args, object[] bindArgs, out object result) { const BindingFlags getPropertyFlags = BindingFlags.GetField | BindingFlags.GetProperty; const BindingFlags setPropertyFlags = BindingFlags.SetProperty | BindingFlags.PutDispProperty | BindingFlags.PutRefDispProperty; if (name == "out") { if ((invokeFlags & getPropertyFlags) != 0) { result = new OutArg <T>(this); return(true); } } else if (name == "ref") { if ((invokeFlags & getPropertyFlags) != 0) { result = new RefArg <T>(this); return(true); } } else if (name == "value") { if (invokeFlags.HasFlag(BindingFlags.InvokeMethod)) { if (InvokeHelpers.TryInvokeObject(value, invokeFlags, args, bindArgs, typeof(IDynamicMetaObjectProvider).IsAssignableFrom(typeof(T)), out result)) { return(true); } if (invokeFlags.HasFlag(BindingFlags.GetField) && (args.Length < 1)) { result = HostObject.WrapResult(value); return(true); } result = null; return(false); } if ((invokeFlags & getPropertyFlags) != 0) { result = HostObject.WrapResult(value); return(true); } if ((invokeFlags & setPropertyFlags) != 0) { if (args.Length == 1) { result = HostObject.WrapResult(((IHostVariable)this).Value = args[0], typeof(T)); return(true); } } } result = null; return(false); }