次の方法で共有


CodeAccessPermission.IsSubsetOf(IPermission) メソッド

定義

派生クラスによって実装されるときに、現在のアクセス許可が、指定したアクセス許可のサブセットかどうかを判断します。

public:
 abstract bool IsSubsetOf(System::Security::IPermission ^ target);
public abstract bool IsSubsetOf (System.Security.IPermission target);
abstract member IsSubsetOf : System.Security.IPermission -> bool
Public MustOverride Function IsSubsetOf (target As IPermission) As Boolean

パラメーター

target
IPermission

サブセットの関係にあるかどうかをテストするアクセス許可。 このアクセス許可は、現在のアクセス許可と同じ型であることが必要です。

戻り値

現在のアクセス許可が、指定したアクセス許可のサブセットの場合は true。それ以外の場合は false

実装

例外

target パラメーターが null でなく、また現在のアクセス許可と同じ型でもありません。

次のコード例は、 メソッドのオーバーライドを IsSubsetOf 示しています。 このコード例は、CodeAccessPermission クラスのために提供されている大規模な例の一部です。

public:
   virtual bool IsSubsetOf( IPermission^ target ) override
   {
#if ( debug ) 
      Console::WriteLine( "************* Entering IsSubsetOf *********************" );
#endif

      if ( target == nullptr )
      {
         Console::WriteLine( "IsSubsetOf: target == null" );
         return false;
      }

#if ( debug ) 
      Console::WriteLine( "This is = {0}", ((NameIdPermission)this).Name );
      Console::WriteLine( "Target is {0}", ((NameIdPermission)target).m_Name );
#endif

      try
      {
         NameIdPermission^ operand = dynamic_cast<NameIdPermission^>(target);
         
         // The following check for unrestricted permission is only included as an example for
         // permissions that allow the unrestricted state. It is of no value for this permission.
         if ( true == operand->m_Unrestricted )
         {
            return true;
         }
         else if ( true == this->m_Unrestricted )
         {
            return false;
         }

         if ( this->m_Name != nullptr )
         {
            if ( operand->m_Name == nullptr )
            {
               return false;
            }
            if ( this->m_Name->Equals( "" ) )
            {
               return true;
            }
         }

         if ( this->m_Name->Equals( operand->m_Name ) )
         {
            return true;
         }
         else
         {
            // Check for wild card character '*'.
            int i = operand->m_Name->LastIndexOf( "*" );

            if ( i > 0 )
            {
               String^ prefix = operand->m_Name->Substring( 0, i );
               if ( this->m_Name->StartsWith( prefix ) )
               {
                  return true;
               }
            }
         }
         return false;
      }
      catch ( InvalidCastException^ ) 
      {
         throw gcnew ArgumentException( String::Format( "Argument_WrongType", this->GetType()->FullName ) );
      }
   }
        public override bool IsSubsetOf(IPermission target)
        {
#if(debug)
            Console.WriteLine ("************* Entering IsSubsetOf *********************");
#endif
            if (target == null)
            {
                Console.WriteLine ("IsSubsetOf: target == null");
                return false;
            }
#if(debug)

            Console.WriteLine ("This is = " + (( NameIdPermission)this).Name);
            Console.WriteLine ("Target is " + (( NameIdPermission)target).m_Name);
#endif
            try
            {
                 NameIdPermission operand = ( NameIdPermission)target;

                // The following check for unrestricted permission is only included as an example for
                // permissions that allow the unrestricted state. It is of no value for this permission.
                if (true == operand.m_Unrestricted)
                {
                    return true;
                }
                else if (true == this.m_Unrestricted)
                {
                    return false;
                }

                if (this.m_Name != null)
                {
                    if (operand.m_Name == null) return false;

                    if (this.m_Name == "") return true;
                }

                if (this.m_Name.Equals (operand.m_Name))
                {
                    return true;
                }
                else
                {
                    // Check for wild card character '*'.
                    int i = operand.m_Name.LastIndexOf ("*");

                    if (i > 0)
                    {
                        string prefix = operand.m_Name.Substring (0, i);

                        if (this.m_Name.StartsWith (prefix))
                        {
                            return true;
                        }
                    }
                }

                return false;
            }
            catch (InvalidCastException)
            {
                throw new ArgumentException (String.Format ("Argument_WrongType", this.GetType ().FullName));
            }
        }
        Public Overrides Function IsSubsetOf(ByVal target As IPermission) As Boolean

#If (Debug) Then

            Console.WriteLine("************* Entering IsSubsetOf *********************")
#End If
            If target Is Nothing Then
                Console.WriteLine("IsSubsetOf: target == null")
                Return False
            End If
#If (Debug) Then
            Console.WriteLine(("This is = " + CType(Me, NameIdPermission).Name))
            Console.WriteLine(("Target is " + CType(target, NameIdPermission).m_name))
#End If
            Try
                Dim operand As NameIdPermission = CType(target, NameIdPermission)

                ' The following check for unrestricted permission is only included as an example for
                ' permissions that allow the unrestricted state. It is of no value for this permission.
                If True = operand.m_Unrestricted Then
                    Return True
                ElseIf True = Me.m_Unrestricted Then
                    Return False
                End If

                If Not (Me.m_name Is Nothing) Then
                    If operand.m_name Is Nothing Then
                        Return False
                    End If
                    If Me.m_name = "" Then
                        Return True
                    End If
                End If
                If Me.m_name.Equals(operand.m_name) Then
                    Return True
                Else
                    ' Check for wild card character '*'.
                    Dim i As Integer = operand.m_name.LastIndexOf("*")

                    If i > 0 Then
                        Dim prefix As String = operand.m_name.Substring(0, i)

                        If Me.m_name.StartsWith(prefix) Then
                            Return True
                        End If
                    End If
                End If

                Return False
            Catch
                Throw New ArgumentException(String.Format("Argument_WrongType", Me.GetType().FullName))
            End Try
        End Function

注釈

現在のアクセス許可が、指定したアクセス許可に完全に含まれる操作のセットを指定している場合、現在のアクセス許可は、指定されたアクセス許可のサブセットです。 たとえば、C:\example.txt へのアクセスを表すアクセス許可は、C:\ へのアクセスを表すアクセス許可のサブセットです。 このメソッドが を返す true場合、現在のアクセス許可は、指定されたアクセス許可よりも保護されたリソースへのアクセスを表しません。

次のステートメントは、 メソッドのすべてのオーバーライドに対して IsSubsetOf である必要trueがあります。 XYZ は null 参照ではないカスタム コード アクセス許可オブジェクトを表し、U は無制限のコード アクセス許可を表し、N は の空のNoneアクセス許可をPermissionState表します。

  • X。IsSubsetOf(X) は を返します true

  • X。IsSubsetOf(Y) は Y と同じ値を返します。X と Y が同じアクセス許可セットを表す場合にのみ、IsSubsetOf(X) を指定します。

  • X の場合。IsSubsetOf(Y) と Y。IsSubsetOf(Z) はどちらも、X を返しますtrue。IsSubsetOf(Z) は を返しますtrue

  • X。IsSubsetOf(U) は を返します true

  • X。IsSubsetOf(N) は を返します false

  • N。IsSubsetOf(X) は を返します true

XY が null 参照であるカスタム コード アクセス許可オブジェクトを表す場合は、X。IsSubsetOf(Y) は を返しますtrueZ も null の場合、複合セット演算 X。Union(Y)。2 つの null アクセス許可の和集合が null アクセス許可であるため、IsSubsetOf(Z) も返trueされます。

注意 (実装者)

派生クラスでこのメソッドをオーバーライドする必要があります。

適用対象