継承確認要求

継承確認要求をクラスに適用した場合と、メソッドに適用した場合とでは、それぞれの持つ意味は異なります。 継承確認要求をクラス レベルに配置することで、指定したアクセス許可を持つコードだけがクラスから継承できるようにすることができます。 そのコードを必要とするメソッドに配置された継承確認要求には、メソッドをオーバーライドするための指定したアクセス許可が与えられます。

メモメモ

.NET Framework Version 4 では、新しい透過性モデルが導入されました。透過的セキュリティ コード、レベル 2 モデルでは、SecurityCriticalAttribute 属性または SecuritySafeCriticalAttribute 属性により安全なコードを識別します。セキュリティ クリティカル コードでは、呼び出し元と継承先の両方が完全に信頼されていることが必要です。セキュリティ クリティカルな型またはメンバーを継承するすべての型またはメンバーは、セキュリティ クリティカルであるか、セキュリティ セーフ クリティカルである必要があります。以前のコード アクセス セキュリティ規則 (レベル 1) を使用するアセンブリは、それらが完全に信頼されていれば、レベル 2 のセキュリティ クリティカルな型およびメンバーを呼び出すことができます。ただし、レベル 2 の型とメンバーで継承確認要求を具体的に指定する必要があります。これは、レベル 2 の暗黙的継承規則は、レベル 1 の呼び出し元に適用されないからです。

クラスの継承確認要求

クラスに適用された継承確認要求は、親クラスから派生したすべてのクラスが、指定されたアクセス許可を持つことを要求します。 たとえば、クラス B がクラス A から継承し、クラス A が継承確認要求によって保護されている場合、クラス B を実行するためには、A によって要求されているアクセス許可がクラス B に与えられていることが必要です。 クラス B が必要なアクセス許可を与えられ、クラス A から派生する場合、クラス C がクラス B から派生するには、クラス C にも A によって要求されているアクセス許可が与えられる必要があります。 この確認要求は宣言によってのみ適用されます。

継承確認要求を使用して、MyClass1 クラスから継承したすべてのクラスにカスタム アクセス許可 CustomPermissionAttribute を与えることを要求するコード例を次に示します。 このアクセス許可は架空のカスタム許可であり、.NET Framework には実在しません。 この確認要求は、CustomPermissionAttribute に SecurityAction.InheritanceDemand 列挙値を渡すことによって行われます。

<CustomPermissionAttribute(SecurityAction.InheritanceDemand)> _
Public Class MyClass1
    Public Sub New()
    End Sub 
   
    Public Overridable Function ReadData() As String
        ' Access a custom resource.
    End Function
End Class    
[CustomPermissionAttribute(SecurityAction.InheritanceDemand)]
public class MyClass
{
    public MyClass()
    {    
    }   

    public virtual string ReadData()
    {
        // Access a custom resource.
    }
}

メソッドの継承確認要求

基本クラスの静的メソッドに継承確認要求を配置しても、静的メソッドが関連しないため派生クラスには影響を及ぼしません。 しかし、基本クラスの非静的メソッドに継承確認要求を配置すると、そのクラスの継承確認要求と同じ効果を発揮します。 派生クラスのすべてのメソッドは、クラスのコンストラクターを含め、継承確認要求に一致する必要があります。

参照

概念

属性を使用したメタデータの拡張

セキュリティ確認要求

独自のコード アクセス許可の作成

宣言セキュリティのサポートの追加

コード アクセス セキュリティ