다음을 통해 공유


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 TypeInformation, MemberAccessReflectionEmit가 설정되어 있습니다. 
MemberAccess 모든 형식 멤버에 대한 작업을 호출할 수 있습니다. 이 플래그가 설정되지 않으면 볼 수 있는 형식 멤버의 호출만 허용됩니다. 
NoFlags 볼 수 없는 형식에 대해서는 리플렉션이 허용되지 않습니다. 
ReflectionEmit System.Reflection.Emit의 사용이 허용됩니다. 
TypeInformation 볼 수 없는 형식의 멤버에 대해 리플렉션이 허용됩니다. 

설명

이 열거형은 ReflectionPermission에서 사용합니다. ReflectionPermission이 부여되지 않으면 볼 수 있는 멤버만 리플렉션을 수행할 수 있습니다.

경고

ReflectionPermission은 전용 클래스 멤버와 메타데이터에 대한 액세스를 제공할 수 있으므로 인터넷 코드에 ReflectionPermission을 부여하지 않는 것이 좋습니다.

예제

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 클래스