Richieste di ereditarietà

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.

NotaNota

In .NET Framework versione 4 è stato introdotto un nuovo modello di trasparenza.Il modello Codice SecurityTransparent, livello 2 consente di identificare il codice sicuro con l'attributo SecurityCriticalAttribute o SecuritySafeCriticalAttribute.Il codice critico per la sicurezza richiede che sia i chiamanti che gli eredi siano completamente attendibili.Qualsiasi tipo o membro che eredita da un tipo o un membro critico per la sicurezza deve essere di tipo SecurityCritical o SecuritySafeCritical.Gli assembly che utilizzano regole di sicurezza per l'accesso al codice precedenti (livello 1) possono chiamare tipi e membri critici per la sicurezza se sono completamente attendibili.I tipi e i membri di livello 2 devono tuttavia identificare in maniera specifica le richieste di ereditarietà, in quanto le regole di ereditarietà implicite di livello 2 non si applicano ai chiamanti di livello 1.

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 a una classe B viene concessa tale autorizzazione e la classe deriva dalla classe A, allora l'autorizzazione deve essere richiesta anche alla classe C da A, se deve derivare da B. Questa richiesta può essere applicata solo in modo dichiarativo.

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

Estensione di metadati mediante attributi

Richieste di sicurezza

Creazione di autorizzazioni personalizzate di accesso al codice

Aggiunta del supporto della sicurezza dichiarativa

Sicurezza dall'accesso di codice