CodeAccessPermission.IsSubsetOf(IPermission) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
派生クラスによって実装されるときに、現在のアクセス許可が、指定したアクセス許可のサブセットかどうかを判断します。
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
があります。
X、Y、Z は 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
。
X と Y が null 参照であるカスタム コード アクセス許可オブジェクトを表す場合は、X。IsSubsetOf(Y) は を返しますtrue
。
Z も null の場合、複合セット演算 X。Union(Y)。2 つの null アクセス許可の和集合が null アクセス許可であるため、IsSubsetOf(Z) も返true
されます。
注意 (実装者)
派生クラスでこのメソッドをオーバーライドする必要があります。
適用対象
.NET