public MemberProxy <T> Of(object subject)
        {
            MemberProxy <T> cloned = (MemberProxy <T>)MemberwiseClone();

            cloned.subject = subject;
            return(cloned);
        }
        public virtual MemberProxy <T> Get <T> (string member)
        {
            string normalised = NormaliseQuery(member);

            return(ParseAndProcess(normalised, "Find", (text, state) => {
                MemberPart parsed = MatchMember(state);
                state.MustBeEmpty();
                MemberProxy <T> result = PartToProxy <T>(parsed);
                return result;
            }));
        }
        public override MemberProxy <T> Get <T> (string member)
        {
            string normalised = NormaliseQuery(member);

            if (CheckParserCache(normalised, out MemberInfo cached))
            {
                return(InfoToProxy <T>(cached));
            }
            MemberProxy <T> result = base.Get <T>(normalised);

            SaveCache(normalised, result?.Member);
            return(result);
        }