public override DynamicMetaObject BindGetMember(GetMemberBinder binder) { ComBinder.ComGetMemberBinder comBinder = binder as ComBinder.ComGetMemberBinder; bool canReturnCallables = comBinder == null ? false : comBinder._CanReturnCallables; ContractUtils.RequiresNotNull(binder, "binder"); ComMethodDesc method; ComEventDesc @event; // 1. Try methods if (_self.TryGetMemberMethod(binder.Name, out method)) { return(BindGetMember(method, canReturnCallables)); } // 2. Try events if (_self.TryGetMemberEvent(binder.Name, out @event)) { return(BindEvent(@event)); } // 3. Try methods explicitly by name if (_self.TryGetMemberMethodExplicit(binder.Name, out method)) { return(BindGetMember(method, canReturnCallables)); } // 4. Fallback return(base.BindGetMember(binder)); }