/// <excludedoc />
 protected internal override ITypeInfo ApplySubstitution(StaticTypeSubstitution substitution)
 {
     return ElementType.ApplySubstitution(substitution).MakePointerType();
 }
 /// <summary>
 /// Applies a type substitution and returns the resulting type.
 /// </summary>
 /// <param name="substitution">The substitution.</param>
 /// <returns>The type after substitution has been performed.</returns>
 protected internal virtual ITypeInfo ApplySubstitution(StaticTypeSubstitution substitution)
 {
     return this;
 }
 /// <summary>
 /// Creates a wrapper.
 /// </summary>
 /// <param name="policy">The reflection policy.</param>
 /// <param name="handle">The underlying reflection object.</param>
 /// <param name="declaringType">The declaring type.</param>
 /// <param name="reflectedType">The reflected type.</param>
 /// <param name="substitution">The type substitution for generic parameters.</param>
 /// <exception cref="ArgumentNullException">Thrown if <paramref name="policy"/>, <paramref name="handle"/>,
 /// or <paramref name="declaringType"/> or <paramref name="reflectedType"/> is null.</exception>
 public StaticMethodWrapper(StaticReflectionPolicy policy, object handle, StaticDeclaredTypeWrapper declaringType,
     StaticDeclaredTypeWrapper reflectedType, StaticTypeSubstitution substitution)
     : base(policy, handle, declaringType, reflectedType)
 {
     this.substitution = substitution;
 }
 /// <excludedoc />
 protected internal override ITypeInfo ApplySubstitution(StaticTypeSubstitution substitution)
 {
     return ElementType.ApplySubstitution(substitution).MakeArrayType(arrayRank);
 }
 /// <excludedoc />
 protected internal override ITypeInfo ApplySubstitution(StaticTypeSubstitution substitution)
 {
     return substitution.Apply(this);
 }