<Type Name="ReflectionPermission" FullName="System.Security.Permissions.ReflectionPermission" FullNameSP="System_Security_Permissions_ReflectionPermission" Maintainer="ecma">
  <TypeSignature Language="ILASM" Value=".class public sealed serializable ReflectionPermission extends System.Security.CodeAccessPermission" />
  <TypeSignature Language="C#" Value="public sealed class ReflectionPermission : System.Security.CodeAccessPermission, System.Security.Permissions.IBuiltInPermission, System.Security.Permissions.IUnrestrictedPermission" />
  <MemberOfLibrary>Reflection</MemberOfLibrary>
  <AssemblyInfo>
    <AssemblyName>mscorlib</AssemblyName>
    <AssemblyPublicKey>[00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 ]</AssemblyPublicKey>
    <AssemblyVersion>2.0.0.0</AssemblyVersion>
  </AssemblyInfo>
  <ThreadingSafetyStatement>All public static members of this type are safe for multithreaded operations. No instance members are guaranteed to be thread safe.</ThreadingSafetyStatement>
  <Base>
    <BaseTypeName>System.Security.CodeAccessPermission</BaseTypeName>
  </Base>
  <Interfaces>
    <Interface>
      <InterfaceName>System.Security.Permissions.IBuiltInPermission</InterfaceName>
    </Interface>
    <Interface>
      <InterfaceName>System.Security.Permissions.IUnrestrictedPermission</InterfaceName>
    </Interface>
  </Interfaces>
  <Docs>
    <summary>
      <para> Secures access to the metadata of non-public types and members through reflection.</para>
    </summary>
    <remarks>
      <para>Code with the appropriate <see cref="T:System.Security.Permissions.ReflectionPermission" /> has
   access to non-public members of a type .
   Without <see cref="T:System.Security.Permissions.ReflectionPermission" /> ,
   code can access only the public members of assemblies.</para>
      <block subset="none" type="note">
        <para> Without <see cref="T:System.Security.Permissions.ReflectionPermission" />,
   untrusted code can perform the following operations on members of loaded
   assemblies:</para>
        <list type="bullet">
          <item>
            <term>
      Obtain type information from metadata for public
      types and members.</term>
          </item>
          <item>
            <term>
      Invoke public members.</term>
          </item>
          <item>
            <term>
      Invoke members defined with family access in the
      calling code's base classes.</term>
          </item>
          <item>
            <term>
      Invoke members defined with assembly access in the
      calling code's assembly.</term>
          </item>
          <item>
            <term>
      Invoke members defined with <see langword="FamilyAndAssembly" /> or
   <see langword="FamilyOrAssembly" /> access in the calling code's 
      base classes and/or assembly.</term>
          </item>
          <item>
            <term>
      Enumerate assemblies.</term>
          </item>
          <item>
            <term>
      Enumerate public types.</term>
          </item>
          <item>
            <term>
      Enumerate types in the calling
      
      code's assembly.</term>
          </item>
        </list>
      </block>
      <para>
        <see cref="T:System.Security.Permissions.ReflectionPermission" /> instances
can allow untrusted code to obtain type and member
information, invoke members, and enumerate types that would otherwise be inaccessible. <block subset="none" type="note">Because <see cref="T:System.Security.Permissions.ReflectionPermission" /> can
provide access to members
and
information that were not intended for public
access, it is recommended that <see cref="T:System.Security.Permissions.ReflectionPermission" /> be
granted only to trusted code.</block></para>
      <para>The XML encoding of a <see cref="T:System.Security.Permissions.ReflectionPermission" /> instance is defined below
   in EBNF format. The following conventions are used: </para>
      <list type="bullet">
        <item>
          <term>
            <para> All non-literals in the grammar below are shown in normal type.</para>
          </term>
        </item>
        <item>
          <term>
            <para> All literals are in bold font. </para>
          </term>
        </item>
      </list>
      <para> The following meta-language symbols are used: </para>
      <list type="bullet">
        <item>
          <term>
         '*' represents a meta-language symbol suffixing an
         expression that can appear zero or more times.</term>
        </item>
        <item>
          <term>
         '?' represents a meta-language symbol suffixing an
         expression that can appear zero or one time.</term>
        </item>
        <item>
          <term>
         '+' represents a meta-language symbol suffixing an
         expression that can appear one or more times.</term>
        </item>
        <item>
          <term>
         '(',')' is used to group literals, non-literals or a
         mixture of literals and non-literals.</term>
        </item>
        <item>
          <term>
         '|' denotes an exclusive disjunction between two
         expressions.</term>
        </item>
        <item>
          <term>
         '::= ' denotes a production rule where a left hand
         non-literal is replaced by a right hand expression containing literals,
         non-literals or both.</term>
        </item>
      </list>
      <para>BuildVersion refers to the build version of the shipping CLI. This is
   specified as a dotted build number such as '2412.0' . </para>
      <para>ECMAPubKeyToken ::= <see langword="b77a5c561934e089" /></para>
      <para>ReflectionPermissionFlag = <see langword="MemberAccess" />
| <see langword="TypeInformation" /></para>
      <para>Each ReflectionPermissionFlag can appear in the XML no more than once. For example, Flags=MemberAccess,MemberAccess is illegal.</para>
      <para>The XML encoding of a <see cref="T:System.Security.Permissions.ReflectionPermission" />
instance is as follows:</para>
      <para>ReflectionPermissionXML ::=</para>
      <c>
        <para>
          <see langword="&lt;IPermission" />
        </para>
        <para>
          <see langword="class=&quot;" />
        </para>
        <para>
          <see langword="System.Security.Permissions.ReflectionPermission, mscorlib," />
        </para>
        <para>
          <see langword="Version=1.0." />BuildVersion<see langword="," /></para>
        <para>
          <see langword="Culture=neutral," />
        </para>
        <para>
          <see langword="PublicKeyToken=" />ECMAPubKeyToken<see langword="&quot;" /></para>
        <para>
          <see langword="version=&quot;1&quot;" />
        </para>
        <para>(</para>
        <para>
          <see langword="Unrestricted=&quot;true&quot; " />
        </para>
        <para>)</para>
        <para>|</para>
        <para>(</para>
        <para>
          <see langword="Flags=&quot;NoFlags" /> |
(ReflectionPermissionFlag (<see langword="," />ReflectionPermissionFlag)*<see langword="&quot;" /></para>
        <para>) </para>
        <para>
          <see langword="/&gt;" />
        </para>
      </c>
    </remarks>
  </Docs>
  <Members>
    <Member MemberName=".ctor">
      <MemberSignature Language="C#" Value="public ReflectionPermission (System.Security.Permissions.PermissionState state);" />
      <MemberType>Constructor</MemberType>
      <Parameters>
        <Parameter Name="state" Type="System.Security.Permissions.PermissionState" />
      </Parameters>
      <Docs>
        <param name="state">To be added.</param>
        <summary>To be added.</summary>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName=".ctor">
      <MemberSignature Language="ILASM" Value="public rtspecialname specialname instance void .ctor(valuetype System.Security.Permissions.ReflectionPermissionFlag flag)" />
      <MemberSignature Language="C#" Value="public ReflectionPermission (System.Security.Permissions.ReflectionPermissionFlag flag);" />
      <MemberType>Constructor</MemberType>
      <ReturnValue />
      <Parameters>
        <Parameter Name="flag" Type="System.Security.Permissions.ReflectionPermissionFlag" />
      </Parameters>
      <Docs>
        <param name="flag">One or more <see cref="T:System.Security.Permissions.ReflectionPermissionFlag" /> values.</param>
        <summary>
          <para>Constructs and initializes a new instance of the <see cref="T:System.Security.Permissions.ReflectionPermission" /> class with the specified
   access.</para>
        </summary>
        <remarks>To be added.</remarks>
        <exception cref="T:System.ArgumentException">The <paramref name="flag" /> parameter contains a value that is not a combination of <see cref="T:System.Security.Permissions.ReflectionPermissionFlag" /> values.</exception>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="Copy">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual class System.Security.IPermission Copy()" />
      <MemberSignature Language="C#" Value="public override System.Security.IPermission Copy ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Security.IPermission</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>Returns a new <see cref="T:System.Security.Permissions.ReflectionPermission" /> object containing the same values as the current 
   instance.</para>
        </summary>
        <returns>
          <para>A new <see cref="T:System.Security.Permissions.ReflectionPermission" /> instance that contains the same values as the current instance.</para>
        </returns>
        <remarks>
          <block subset="none" type="note">
            <para>The object returned by this method represents the same access to resources as 
         the current instance.</para>
            <para>This method overrides <see cref="M:System.Security.CodeAccessPermission.Copy" qualify="true" /> and is implemented to 
      support the <see cref="T:System.Security.IPermission" /> interface.</para>
          </block>
        </remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="Flags">
      <MemberSignature Language="C#" Value="public System.Security.Permissions.ReflectionPermissionFlag Flags { set; get; };" />
      <MemberType>Property</MemberType>
      <ReturnValue>
        <ReturnType>System.Security.Permissions.ReflectionPermissionFlag</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>To be added.</summary>
        <value>To be added.</value>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="FromXml">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual void FromXml(class System.Security.SecurityElement esd)" />
      <MemberSignature Language="C#" Value="public override void FromXml (System.Security.SecurityElement esd);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="esd" Type="System.Security.SecurityElement" />
      </Parameters>
      <Docs>
        <param name="esd">A <see cref="T:System.Security.SecurityElement" /> instance containing the XML encoding to use to reconstruct the state of a <see cref="T:System.Security.Permissions.ReflectionPermission" /> object.</param>
        <summary>
          <para>Reconstructs the state of a 
   <see cref="T:System.Security.Permissions.ReflectionPermission" /> object using the specified XML
      encoding.</para>
        </summary>
        <remarks>
          <para>The state of the current instance is changed to the state encoded in 
   <paramref name="esd" />.</para>
          <block subset="none" type="note">
            <para>For the XML encoding for this class, see the 
      <see cref="T:System.Security.Permissions.ReflectionPermission" /> class 
         page.</para>
            <para>This method overrides <see cref="M:System.Security.CodeAccessPermission.FromXml(System.Security.SecurityElement)" qualify="true" /> .</para>
          </block>
        </remarks>
        <exception cref="T:System.ArgumentNullException">The <paramref name="esd" /> parameter is <see langword="null" />.</exception>
        <exception cref="T:System.ArgumentException">
          <para>The <paramref name="esd" /> parameter is not a <see cref="T:System.Security.Permissions.ReflectionPermission" /> element.</para>
          <para>-or-</para>
          <para>The <paramref name="esd" /> parameter's version number is not valid.</para>
        </exception>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="Intersect">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual class System.Security.IPermission Intersect(class System.Security.IPermission target)" />
      <MemberSignature Language="C#" Value="public override System.Security.IPermission Intersect (System.Security.IPermission target);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Security.IPermission</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="target" Type="System.Security.IPermission" />
      </Parameters>
      <Docs>
        <param name="target">A <see cref="T:System.Security.Permissions.ReflectionPermission" /> instance to intersect with the current instance. </param>
        <summary>
          <para>Returns a new <see cref="T:System.Security.Permissions.ReflectionPermission" /> object that is the intersection
   of the current instance and the specified object.</para>
        </summary>
        <returns>
          <para>A new <see cref="T:System.Security.Permissions.ReflectionPermission" /> instance that represents the intersection of the
   current instance and <paramref name="target" />. If the intersection is empty, returns
<see langword="null" />. If <paramref name="target" /> is
<see langword="null" />, returns <see langword="null" /> 
.</para>
        </returns>
        <remarks>
          <block subset="none" type="note">
            <para>The intersection of two permissions is a permission that secures the
         resources and operations secured by both permissions. Specifically, it
         represents the minimum permission such that any demand that passes both
         permissions will also pass their intersection.</para>
            <para>This method overrides <see cref="M:System.Security.CodeAccessPermission.Intersect(System.Security.IPermission)" qualify="true" /> and is implemented to
      support the <see cref="T:System.Security.IPermission" /> interface.</para>
          </block>
        </remarks>
        <exception cref="T:System.ArgumentException">The <paramref name="target" /> parameter is not <see langword="null" /> and is not an instance of <see cref="T:System.Security.Permissions.ReflectionPermission" /> . </exception>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="IsSubsetOf">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual bool IsSubsetOf(class System.Security.IPermission target)" />
      <MemberSignature Language="C#" Value="public override bool IsSubsetOf (System.Security.IPermission target);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="target" Type="System.Security.IPermission" />
      </Parameters>
      <Docs>
        <param name="target">A <see cref="T:System.Security.Permissions.ReflectionPermission" /> instance that is to be tested for the subset relationship.</param>
        <summary>
          <para> Determines whether the current instance is a subset of
      the specified object.</para>
        </summary>
        <returns>
          <para>
            <see langword="true" /> if the current instance is a subset of <paramref name="target" /> ;
   otherwise,<see langword=" false" />. If the current instance is unrestricted, and
<paramref name="target" /> is not, returns <see langword="false" />. If <paramref name="target" /> is 
   unrestricted, returns <see langword="true" />. If target is
<see langword="null" /> and the access level of the current instance is <see cref="F:System.Security.Permissions.ReflectionPermissionFlag.NoFlags" />, returns <see langword="true" />. If 
   target is <see langword="null" /> and the access level of the current
   instance is any value other than <see cref="F:System.Security.Permissions.ReflectionPermissionFlag.NoFlags" />, returns
<see langword="false" />.</para>
        </returns>
        <remarks>
          <block subset="none" type="note">
            <para>The current instance is a subset of <paramref name="target" /> if the current instance
      specifies a set of accesses to resources that is wholly contained by
   <paramref name="target" /> . For example, a permission that represents access to type
      information is a subset of a permission that represents access to type information and members. </para>
            <para>This method overrides <see cref="M:System.Security.CodeAccessPermission.IsSubsetOf(System.Security.IPermission)" qualify="true" /> and is implemented to
   support the <see cref="T:System.Security.IPermission" /> interface.</para>
          </block>
        </remarks>
        <exception cref="T:System.ArgumentException">The <paramref name="target" /> parameter is not <see langword="null" /> and is not an instance of <see cref="T:System.Security.Permissions.ReflectionPermission" /> . </exception>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="IsUnrestricted">
      <MemberSignature Language="C#" Value="public bool IsUnrestricted ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>To be added.</summary>
        <returns>To be added.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="System.Security.Permissions.IBuiltInPermission.GetTokenIndex">
      <MemberSignature Language="C#" Value="int IBuiltInPermission.GetTokenIndex ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Int32</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>To be added.</summary>
        <returns>To be added.</returns>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="ToXml">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual class System.Security.SecurityElement ToXml()" />
      <MemberSignature Language="C#" Value="public override System.Security.SecurityElement ToXml ();" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Security.SecurityElement</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
          <para>Returns the XML encoding of the current instance.</para>
        </summary>
        <returns>
          <para>A <see cref="T:System.Security.SecurityElement" /> containing the XML encoding of the state of the current
   instance.</para>
        </returns>
        <remarks>
          <block subset="none" type="note">
            <para>For the XML encoding for this class, see the <see cref="T:System.Security.Permissions.ReflectionPermission" /> class page.</para>
            <para>This method overrides <see cref="M:System.Security.CodeAccessPermission.ToXml" qualify="true" /> .</para>
          </block>
        </remarks>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
    <Member MemberName="Union">
      <MemberSignature Language="ILASM" Value=".method public hidebysig virtual class System.Security.IPermission Union(class System.Security.IPermission other)" />
      <MemberSignature Language="C#" Value="public override System.Security.IPermission Union (System.Security.IPermission other);" />
      <MemberType>Method</MemberType>
      <ReturnValue>
        <ReturnType>System.Security.IPermission</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="other" Type="System.Security.IPermission" />
      </Parameters>
      <Docs>
        <param name="other">A <see cref="T:System.Security.Permissions.ReflectionPermission" /> instance to be combined with the current instance. </param>
        <summary>
          <para>Returns a new <see cref="T:System.Security.Permissions.ReflectionPermission" /> object that is the union of the
   current instance and the specified object.</para>
        </summary>
        <returns>
          <para>A new <see cref="T:System.Security.Permissions.ReflectionPermission" /> 
instance that represents the union of the current instance and <paramref name="other" />. If
the current instance or <paramref name="other " />is unrestricted, returns a
<see cref="T:System.Security.Permissions.ReflectionPermission" /> instance that is 
unrestricted. If <paramref name="other" /> is <see langword="null" />, returns a copy of the
current instance.</para>
        </returns>
        <remarks>
          <block subset="none" type="note">
            <para>The result of a call to <see cref="M:System.Security.Permissions.ReflectionPermission.Union(System.Security.IPermission)" /> 
   is a permission that represents all of the access
   to resources represented by both the current instance and <paramref name="other" />. Any
   demand that passes either the current instance or <paramref name="other " />passes their
   union.</para>
            <para>This method overrides <see cref="M:System.Security.CodeAccessPermission.Union(System.Security.IPermission)" qualify="true" /> and is implemented to
support the <see cref="T:System.Security.IPermission" /> interface.</para>
          </block>
        </remarks>
        <exception cref="T:System.ArgumentException">The <paramref name="other " />parameter is not <see langword="null" /> and is not an instance of <see cref="T:System.Security.Permissions.ReflectionPermission" /> .</exception>
      </Docs>
      <Excluded>0</Excluded>
    </Member>
  </Members>
  <TypeExcluded>0</TypeExcluded>
  <Attributes>
    <Attribute>
      <AttributeName>System.Runtime.InteropServices.ComVisible(true)</AttributeName>
    </Attribute>
  </Attributes>
</Type>
