英語で読む

次の方法で共有


CodeAccessPermission.IsSubsetOf(IPermission) メソッド

定義

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

C#
public abstract bool IsSubsetOf(System.Security.IPermission target);

パラメーター

target
IPermission

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

戻り値

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

実装

例外

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

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

C#
        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));
            }
        }

注釈

現在のアクセス許可が、指定したアクセス許可に完全に含まれる操作のセットを指定している場合、現在のアクセス許可は、指定されたアクセス許可のサブセットです。 たとえば、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されます。

注意 (実装者)

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

適用対象

製品 バージョン
.NET 8 (package-provided), 9 (package-provided), 10 (package-provided)
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10