Sicurezza dichiarativa utilizzata per l'ambito classe e membro

Aggiornamento: novembre 2007

La sicurezza dichiarativa può essere eseguita su classi, membri e classi nidificate. In questa sezione sono descritte le regole utilizzate per valutare la sicurezza dichiarativa quando è applicata a più livelli della stessa classe.

Classi, membri e sicurezza dichiarativa

Quando viene applicata la sicurezza dichiarativa per la stessa azione di sicurezza sia a livello di classe che a livello di metodo, si verifica quanto indicato nella seguente tabella.

Azione di sicurezza

Comportamento di .NET Framework versioni 1.0 e 1.1

Comportamento di .NET Framework 2.0

Demand

Gli attributi a livello di metodo eseguono l'override di quelli a livello di classe. Se viene inserita una richiesta dichiarativa a livello di metodo, un'eventuale richiesta dichiarativa a livello di classe verrà ignorata.

Gli attributi a livello di metodo e quelli a livello di classe vengono uniti in un singolo set di autorizzazioni per entrambi i livelli.

LinkDemand

Gli attributi a livello di metodo e quelli a livello di classe vengono uniti.

Il comportamento rimane invariato.

InheritanceDemand

Gli attributi a livello di classe richiedono l'autorizzazione specificata per eseguire la derivazione dalla classe.

Gli attributi a livello di metodo richiedono l'autorizzazione specificata per eseguire l'override del metodo in una classe derivata.

Poiché le richieste di ereditarietà hanno significati diversi per classi e metodi, le dichiarazioni possono essere applicate in modo indipendente a livello di classe e metodo.

Il comportamento rimane invariato.

Assert

Gli attributi a livello di metodo eseguono l'override di quelli a livello di classe.

Gli attributi a livello di metodo e quelli a livello di classe vengono uniti in un singolo set di autorizzazioni per entrambi i livelli.

Deny

Gli attributi a livello di metodo eseguono l'override di quelli a livello di classe.

Gli attributi a livello di metodo e quelli a livello di classe vengono uniti in un singolo set di autorizzazioni per entrambi i livelli.

PermitOnly

Gli attributi a livello di metodo eseguono l'override di quelli a livello di classe.

Gli attributi a livello di metodo e quelli a livello di classe vengono intersecati in un singolo set di autorizzazioni per entrambi i livelli.

Se le operazioni di sicurezza sono diverse, come nel caso di una richiesta a livello di classe con un'asserzione a livello di metodo, non si verifica alcuna interazione e sono valutate entrambe.

Classi nidificate e sicurezza dichiarativa

Quando si applica la sicurezza dichiarativa alle classi, questa non viene estesa a eventuali classi nidificate o metodi di classi nidificate. Quando la sicurezza dichiarativa è applicata a classi nidificate o metodi di una classe nidificata, non viene estesa nemmeno alle classi padre. La sicurezza dichiarativa va applicata alle classi nidificate come se si trattasse di classi distinte.

Nell'esempio riportato di seguito è illustrata un'autorizzazione ipotetica richiesta a livello di una classe denominata Main. All'interno di questa classe è definita una classe nidificata denominata Nested. In questo esempio, la richiesta non si applica alla classe nidificata.

<SomePermissionAttribute(SecurityAction.Demand, Unrestricted:=True)> _
Public Class Main
    ' This nested class is not influenced by the demand.
    Public Class Nested
        ' This method is not influenced by the demand.
        Public Sub MyMethod()
        End Sub
    End Class
End Class
[SomePermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
class Main
{
    // This nested class is not influenced by the demand.
    class Nested
    {
        // This method is not influenced by the demand.
        public void MyMethod()
        {   
        }
    }
}

Vedere anche

Concetti

Pretese di protezione

Altre risorse

Protezione dall'accesso di codice