クラスおよびメンバーのスコープで使用される宣言セキュリティ
宣言セキュリティは、クラス、メンバー、および入れ子のクラスに実行できます。 このセクションでは、宣言セキュリティが同じクラスの複数のレベルに適用されたとき、その宣言セキュリティの評価に使用される規則の概要について説明します。
重要 |
---|
.NET Framework Version 4 では、Deny、RequestMinimum、RequestOptional、および RequestRefuse の各アクセス許可要求を適用するためのランタイム サポートは削除されています。これらの要求は、.NET Framework 4 以降に基づくコードで使用しないでください。この変更およびその他の変更の詳細については、「.NET Framework 4 におけるセキュリティの変更点」を参照してください。 |
クラス、メンバー、および宣言セキュリティ
同じセキュリティ アクションに対してクラス レベルとメソッド レベルの両方の宣言セキュリティがある場合、宣言セキュリティは次の表に従って適用されます。
セキュリティ アクション |
.NET Framework Version 2.0 の動作 |
.NET Framework Version 4 の動作 |
---|---|---|
確認要求 |
メソッド レベルの属性とクラス レベルの属性は、両方のレベルに対して単一のアクセス許可セットに統合されます。 |
動作に変更はありません。 |
リンク確認要求 |
メソッド レベルの属性とクラス レベルの属性は統合されます。 |
動作に変更はありません。 |
継承確認要求 |
クラス レベルの属性には、クラスから派生するために指定されたアクセス許可が必要です。 メソッド レベルの属性には、派生したクラスでメソッドをオーバーライドするために指定されたアクセス許可が必要です。 継承確認要求はクラスとメソッドでは意味が異なるため、宣言はクラス レベルとメソッド レベルの両方にそれぞれ独立して適用できます。 |
動作に変更はありません。 |
Assert |
メソッド レベルの属性とクラス レベルの属性は、両方のレベルに対して単一のアクセス許可セットに統合されます。 |
動作に変更はありません。 |
拒否 |
メソッド レベルの属性とクラス レベルの属性は、両方のレベルに対して単一のアクセス許可セットに統合されます。 |
.NET Framework 4 で互換性のために残されています。 |
許可のみ |
メソッド レベルの属性とクラス レベルの属性は、両方のレベルに対して単一のアクセス許可セットに交差されます。 |
動作に変更はありません。 |
セキュリティ アクションが異なる場合 (たとえば、クラス レベルの要求がメソッド レベルのアサートを伴う場合) は、やり取りはまったくなく、両方とも評価されます。
入れ子のクラスと宣言セキュリティ
宣言セキュリティをクラスに適用するとき、それは入れ子のクラスや入れ子のクラスのメソッドには反映されません。 これとは逆に、宣言セキュリティを入れ子のクラスや入れ子のクラスのメソッドに適用するときも、それは親クラスには反映されません。 宣言セキュリティを入れ子のクラスに適用するときは、別のクラスであるかのように適用する必要があります。
Main というクラスのクラス レベルに要求された仮想のアクセス許可の例を次に示します。 このクラスには、入れ子になった Nested というクラスが定義されています。 この例では、要求は入れ子のクラスには適用されていません。
<SomePermissionAttribute(SecurityAction.Demand, Unrestricted:=True)> _
Public Class Main
' This nested class is not influenced by the demand.
Public Class Nested
' This method is not influenced by the demand.
Public Sub MyMethod()
End Sub
End Class
End Class
[SomePermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
class Main
{
// This nested class is not influenced by the demand.
class Nested
{
// This method is not influenced by the demand.
public void MyMethod()
{
}
}
}