Share via


ReflectionPermissionFlag 枚举

指定允许在不可见的成员上使用 System.Reflection

此枚举有一个 FlagsAttribute 属性,允许其成员值按位组合。

**命名空间:**System.Security.Permissions
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<FlagsAttribute> _
Public Enumeration ReflectionPermissionFlag
用法
Dim instance As ReflectionPermissionFlag
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
[FlagsAttribute] 
public enum ReflectionPermissionFlag
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
[FlagsAttribute] 
public enum class ReflectionPermissionFlag
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
/** @attribute FlagsAttribute() */ 
public enum ReflectionPermissionFlag
SerializableAttribute 
ComVisibleAttribute(true) 
FlagsAttribute 
public enum ReflectionPermissionFlag

成员

  成员名称 说明
AllFlags 设置了 TypeInformationMemberAccessReflectionEmit。 
MemberAccess 允许在所有类型成员上调用操作。如果未设置此标志,则只允许在可见类型成员上调用操作。 
NoFlags 不允许在不可见的类型上反射。 
ReflectionEmit 允许使用 System.Reflection.Emit。 
TypeInformation 允许在不可见的类型成员上反射。 

备注

ReflectionPermission 使用此枚举。如果未授予 ReflectionPermission,则只允许在可见的成员上反射。

警告

鉴于 ReflectionPermission 可以提供对私有类成员和元数据的访问,建议不要将 ReflectionPermission 授予 Internet 代码。

示例

Imports System
Imports System.Security
Imports System.Security.Permissions
Imports Microsoft.VisualBasic

Public Class ReflectionGenerator


    Private myReflection As ReflectionPermissionFlag() = _
        {ReflectionPermissionFlag.AllFlags, _
         ReflectionPermissionFlag.MemberAccess, _
         ReflectionPermissionFlag.NoFlags, _
         ReflectionPermissionFlag.ReflectionEmit, _
         ReflectionPermissionFlag.TypeInformation}

    Private reflectionIndex As Integer = 0


    Public Sub New()
        ResetIndex()
    End Sub 'New


    Public Sub ResetIndex()
        reflectionIndex = 0
    End Sub 'ResetIndex

    ' CreateReflection creates a ReflectionPermission object.
    Public Function CreateReflection(ByRef reflectionPerm As ReflectionPermission, ByRef reflection As ReflectionPermissionFlag) As Boolean

        If reflectionIndex >= myReflection.Length Then
            reflectionPerm = New ReflectionPermission(PermissionState.None)
            reflection = ReflectionPermissionFlag.NoFlags
            reflectionIndex &= 1
            Return False
        End If
        reflection = myReflection(reflectionIndex)
        reflectionIndex = reflectionIndex + 1
        Try
            reflectionPerm = New ReflectionPermission(reflection)
            Return True
        Catch e As Exception
            Console.WriteLine(("Cannot create ReflectionPermission: " & reflection & " " & e.ToString()))
            reflectionPerm = New ReflectionPermission(PermissionState.None)
            reflection = ReflectionPermissionFlag.NoFlags
            Return True
        End Try
    End Function 'CreateReflection
End Class 'ReflectionGenerator 
' End of ReflectionGenerator.
using System;
using System.Security;
using System.Security.Permissions;


public class ReflectionGenerator
{


    private ReflectionPermissionFlag[] myReflection =
{
    ReflectionPermissionFlag.AllFlags,
    ReflectionPermissionFlag.MemberAccess,
    ReflectionPermissionFlag.NoFlags,
    ReflectionPermissionFlag.ReflectionEmit,
    ReflectionPermissionFlag.TypeInformation
};

    private int reflectionIndex = 0;

    public ReflectionGenerator()
    {
        ResetIndex();
    }

    public void ResetIndex()
    {
        reflectionIndex = 0;
    }
    // CreateReflection creates a ReflectionPermission object.
    public bool CreateReflection(out ReflectionPermission reflectionPerm,
        out ReflectionPermissionFlag reflection)
    {

        if(reflectionIndex >= myReflection.Length)
        {
            reflectionPerm = new ReflectionPermission(PermissionState.None);
            reflection=ReflectionPermissionFlag.NoFlags;
            reflectionIndex++;
            return false;
        }
        reflection = myReflection[reflectionIndex++];
        try
        {
            reflectionPerm = new ReflectionPermission(reflection);
            return true;
        }
        catch(Exception e)
        {
            Console.WriteLine("Cannot create ReflectionPermission: " + reflection +" "+e);
            reflectionPerm = new ReflectionPermission(PermissionState.None);
            reflection=ReflectionPermissionFlag.NoFlags;
            return true;
        }
    }
} // End of ReflectionGenerator.
using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;
using namespace System::Runtime::InteropServices;
public ref class ReflectionGenerator
{
private:
   array<ReflectionPermissionFlag>^myReflection;
   int reflectionIndex;

public:
   ReflectionGenerator()
   {
      array<ReflectionPermissionFlag>^ temp = {ReflectionPermissionFlag::AllFlags,ReflectionPermissionFlag::MemberAccess,ReflectionPermissionFlag::NoFlags,ReflectionPermissionFlag::ReflectionEmit,ReflectionPermissionFlag::TypeInformation};
      myReflection = temp;
      ResetIndex();
   }

   void ResetIndex()
   {
      reflectionIndex = 0;
   }


   // CreateReflection creates a ReflectionPermission Object*.
   bool CreateReflection( [Out]interior_ptr<ReflectionPermission^> reflectionPerm, [Out]ReflectionPermissionFlag * reflection )
   {
      if ( reflectionIndex >= myReflection->Length )
      {
          *reflectionPerm = gcnew ReflectionPermission( PermissionState::None );
          *reflection = ReflectionPermissionFlag::NoFlags;
         reflectionIndex++;
         return false;
      }

       *reflection = myReflection[ reflectionIndex++ ];
      try
      {
          *reflectionPerm = gcnew ReflectionPermission(  *reflection );
         return true;
      }
      catch ( Exception^ e ) 
      {
         Console::WriteLine( "Cannot create ReflectionPermission: {0}{1}",  *reflection, e );
          *reflectionPerm = gcnew ReflectionPermission( PermissionState::None );
          *reflection = ReflectionPermissionFlag::NoFlags;
         return true;
      }

   }

};

// End of ReflectionGenerator.

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

System.Security.Permissions 命名空间
ReflectionPermission 类
ReflectionPermissionAttribute 类