Richieste di ereditarietà

Aggiornamento: novembre 2007

Le pretese di ereditarietà applicate a classi hanno un significato diverso rispetto a quelle applicate a metodi. È possibile specificare pretese di ereditarietà a livello di classe, per garantire che solo il codice dotato dell'autorizzazione indicata possa ereditare dalla classe. Specificando pretese di ereditarietà in un metodo si richiede che il codice disponga dell'autorizzazione indicata per eseguire l'override del metodo.

Pretese di ereditarietà per classi

L'applicazione di una pretesa di ereditarietà a una classe impone che tutte le classi derivate dalla classe padre dispongano dell'autorizzazione specificata. Se ad esempio si stabilisce che la classe B erediti dalla classe A e tale classe è protetta da una pretesa di ereditarietà, è necessario che alla classe B venga concessa tale autorizzazione, in modo da consentirne l'esecuzione. Se la classe B ottiene l'autorizzazione e deriva dalla classe A, è necessario che anche la classe C disponga dell'autorizzazione pretesa da A, se si stabilisce che derivi da B. Questa pretesa può essere applicata solo in maniera dichiarativa.

Nell'esempio di codice riportato di seguito viene utilizzata una pretesa di ereditarietà per richiedere che ogni classe che eredita dalla classe MyClass1 disponga dell'autorizzazione personalizzata CustomPermissionAttribute. Si tratta di un'autorizzazione personalizzata fittizia, che non esiste realmente in .NET Framework. La pretesa viene specificata passando a CustomPermissionAttribute un valore di enumerazione 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.
    }
}

Pretese di ereditarietà per metodi

La specifica di una pretesa di ereditarietà su un metodo statico nella classe base non influisce in alcun modo sulle classi derivate in quanto i metodi statici non sono correlati. Tale specifica su un metodo non statico nella classe base produce, tuttavia, lo stesso effetto di una pretesa di ereditarietà sulla classe. Tutti i metodi della classe derivata, incluso il costruttore della classe, devono soddisfare la pretesa di ereditarietà.

Vedere anche

Concetti

Pretese di protezione

Creazione di autorizzazioni personalizzate di accesso al codice

Aggiunta del supporto della protezione dichiarativa

Altre risorse

Estensione di metadati mediante attributi

Protezione dall'accesso di codice