Segurança declarativa usada com a classe e o escopo do membro

Segurança declarativa pode ser executada em classes, membros e classes aninhadas. Esta seção descreve as regras usadas para avaliar a segurança declarativa quando aplicada a vários níveis da mesma classe.

Observação importanteImportante

No .NET Framework versão 4, o suporte de tempo de execução foi removido para impor a Deny, RequestMinimum, RequestOptional, e RequestRefuse as solicitações de permissão.Essas solicitações não devem ser usadas no código que se baseia em .NET Framework 4 ou posterior.Para obter mais informações sobre esta e outras alterações, consulte Alterações de segurança na.NET Framework 4.

Segurança declarativa de classes e membros

Quando houver segurança declarativa para a mesma ação de segurança em nível de classe e o nível do método, a segurança declarativa será aplicada de acordo com a tabela a seguir.

Ação de segurança

Comportamento do NET Framework versão 2.0

.NET Framework versão 4comportamento

Por demanda

Atributos de nível de método e atributos de nível de classe são Unidos juntos em um único conjunto dos dois níveis de permissões.

Nenhuma alteração no comportamento.

Demanda de link

Atributos de nível de método e atributos de nível de classe são Unidos.

Nenhuma alteração no comportamento.

Demanda de herança

Os atributos de nível de classe requerem a permissão especificada para derivar da classe.

Os atributos de nível de método requerem a permissão especificada para substituir o método em uma classe derivada.

Como demandas de herança tem significados diferentes para classes e métodos, declarações podem ser aplicadas independentemente a classe e o método de níveis.

Nenhuma alteração no comportamento.

Assert

Atributos de nível de método e atributos de nível de classe são Unidos juntos em um único conjunto dos dois níveis de permissões.

Nenhuma alteração no comportamento.

Negar

Atributos de nível de método e atributos de nível de classe são Unidos juntos em um único conjunto dos dois níveis de permissões.

Obsoleta na .NET Framework 4.

Permitir somente

Atributos de nível de método e atributos de nível de classe são comparados juntos em um único conjunto dos dois níveis de permissões.

Nenhuma alteração no comportamento.

Se as ações de segurança forem diferentes (por exemplo, uma demanda no nível de classe com uma declaração no nível do método), não há nenhuma interação qualquer tipo e ambos são avaliados.

Classes aninhadas e segurança declarativa

Quando você aplica segurança declarativa para classes, ele não propaga a quaisquer classes aninhadas ou métodos de classes aninhadas. Inversamente, quando você aplica segurança declarativa a classes aninhadas ou métodos de uma classe aninhada, ele não propaga para classes pai ou. Você deve aplicar segurança declarativa a classes aninhadas, como se fossem classes separadas.

O exemplo a seguir mostra uma permissão hipotética exigida na classe de nível de uma classe chamada Main. Dentro dessa classe, uma classe aninhada chamada Nested está definido. Neste exemplo, a demanda não se aplica à classe aninhada.

<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()
        {   
        }
    }
}

Consulte também

Conceitos

Demandas de segurança

Segurança de Acesso de código