Demandes d'héritage

Les demandes d'héritage appliquées aux classes ont une signification différente des demandes d'héritage appliquées aux méthodes. Vous pouvez placer des demandes d'héritage au niveau de la classe pour vous assurer que seul le code ayant l'autorisation spécifiée peut hériter de votre classe. Les demandes d'héritage appliquées à des méthodes nécessitent que le code ait l'autorisation spécifiée pour substituer la méthode.

RemarqueRemarque

Un nouveau modèle de transparence a été ajouté au .NET Framework version 4.Le modèle Code transparent de sécurité, niveau 2 identifie le code sécurisé à l'aide de l'attribut SecurityCriticalAttribute ou SecuritySafeCriticalAttribute.Le code critique de sécurité requiert que les appelants et les héritiers soient entièrement fiables.Tout type ou membre qui hérite d'un type ou membre critique de sécurité doit être critique de sécurité (security-critical) ou critique sécurisé (security-safe-critical).Les assemblys qui utilisent des règles de sécurité d'accès du code antérieures (niveau 1) peuvent appeler les types et membres critiques de sécurité de niveau 2 s'ils sont entièrement fiables.Toutefois, les types et membres de niveau 2 doivent identifier spécifiquement les demandes d'héritage, étant donné que les règles d'héritage implicites de niveau 2 ne s'appliquent pas aux appelants de niveau 1.

Demandes d'héritage de classe

Une demande d'héritage appliquée à une classe a pour effet de demander que toutes les classes dérivées de la classe parente aient l'autorisation spécifiée. Par exemple, si la classe B doit hériter de la classe A et si cette dernière est protégée par une demande d'héritage, alors B doit recevoir cette autorisation pour pouvoir s'exécuter. Si la classe B reçoit cette autorisation et dérive de la classe A, la classe C doit aussi avoir l'autorisation demandée par A si elle doit dériver de B. Cette demande ne peut être appliquée que de manière déclarative.

L'exemple de code suivant utilise une demande d'héritage pour exiger que toute classe qui hérite de la classe MyClass1 ait l'autorisation personnalisée CustomPermissionAttribute. Cette autorisation est une autorisation personnalisée hypothétique et n'existe pas dans le .NET Framework. La demande est faite en passant la valeur d'énumération SecurityAction.InheritanceDemand à CustomPermissionAttribute.

<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.
    }
}

Demandes d'héritage de méthode

Placer une demande d'héritage sur une méthode statique dans la classe de base n'a aucun impact sur les classes dérivées car les méthodes statiques ne sont pas liées. Toutefois, placer une demande d'héritage sur toute méthode non statique dans la classe de base a le même effet qu'une demande d'héritage sur la classe. Toutes les méthodes dans la classe dérivée, y compris le constructeur pour la classe, doivent répondre à la demande d'héritage.

Voir aussi

Concepts

Extension des métadonnées à l'aide des attributs

Demandes de sécurité

Création de vos propres autorisations d'accès du code

Ajout de la prise en charge de la sécurité déclarative

Sécurité d'accès du code