継承確認要求
継承確認要求をクラスに適用した場合と、メソッドに適用した場合とでは、それぞれの持つ意味は異なります。継承確認要求をクラス レベルに配置することで、指定したアクセス許可を持つコードだけがクラスから継承できるようにすることができます。そのコードを必要とするメソッドに配置された継承確認要求には、メソッドをオーバーライドするための指定したアクセス許可が与えられます。
クラスの継承確認要求
クラスに適用された継承確認要求は、親クラスから派生したすべてのクラスが、指定されたアクセス許可を持つことを要求します。たとえば、クラス B がクラス A から継承し、クラス A が継承確認要求によって保護されている場合、クラス B を実行するためには、A によって要求されているアクセス許可がクラス B に与えられていることが必要です。クラス B が必要なアクセス許可を与えられ、クラス A から派生した場合、クラス C がクラス B から派生するには、クラス C にも A によって要求されているアクセス許可が与えられる必要があります。この確認要求は宣言的にしか適用されません。
継承確認要求を使用して、MyClass1
クラスから継承したすべてのクラスにカスタム アクセス許可 CustomPermissionAttribute
を与えることを要求するコード例を次に示します。このアクセス許可は架空のカスタム許可であり、.NET Framework には実在しません。この確認要求は、CustomPermissionAttribute
に System.Security.Permissions.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.
}
}
メソッドの継承確認要求
基本クラスの静的メソッドに継承確認要求を配置しても、静的メソッドが関連しないため派生クラスには影響を及ぼしません。しかし、基本クラスの非静的メソッドに継承確認要求を配置すると、そのクラスの継承確認要求と同じ効果を発揮します。派生クラスのすべてのメソッドは、クラスのコンストラクタを含め、継承確認要求に一致する必要があります。
参照
概念
セキュリティ確認要求
独自のコード アクセス許可の作成
宣言セキュリティのサポートの追加