/// <summary>
        /// 指定されたインデックスパラメータを使用するインデクサへのアクセスを提供する<see cref="IndexerReflector{T}"/>を返します
        /// </summary>
        /// <param name="indexes">インデクサインデックスのパラメータ</param>
        /// <exception cref="System.MemberAccessException">指定されたインデクサは存在しません</exception>
        public IndexerReflector <T> IndexerExact <T>(params ReflectionParameter[] indexes)
        {
            PropertyInfo info = null;
            var          key  = ("Indexer:" + string.Join(",", indexes.Select(t => { return(t.Type.Name); }))).GetHashCode();

            if (!Propertys.TryGetValue(key, out info))
            {
                if (!PropertyReflector <T> .TryGetIndexerInfo(m_Reflector.Flags, m_Type, indexes.Select(i => i.Type).ToArray(), out info))
                {
                    throw new MemberAccessException("指定されたインデクサは存在しません");
                }
                Propertys.Add(key, info);
            }
            return(new IndexerReflector <T>(info, m_InstanceObject, indexes));
        }
        /// <summary>
        /// 指定された名前のプロパティへのアクセスを提供する<see cref="PropertyReflector{T}"/>を返します。
        /// </summary>
        /// <param name="name">プロパティの名前を表す文字列</param>
        /// <typeparam name="T">プロパティの型</typeparam>
        /// <returns></returns>
        /// <exception cref="System.MemberAccessException">指定されたプロパティは存在しません</exception>
        public PropertyReflector <T> Property <T>(string name)
        {
            PropertyInfo info = null;
            var          key  = name.GetHashCode();

            if (!Propertys.TryGetValue(key, out info))
            {
                if (!PropertyReflector <T> .TryGetPropertyInfo(m_Reflector.Flags, m_Type, name, out info))
                {
                    throw new MemberAccessException("指定されたプロパティは存在しません");
                }
                Propertys.Add(key, info);
            }
            return(new PropertyReflector <T>(info, m_InstanceObject));
        }