Exemple #1
0
        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));
        }