Segurança declarativa usada no escopo de classes e membros
A segurança declarativa pode ser executada em classes, membros, e em classes aninhadas. Esta seção descreve as regras usadas para avaliar a segurança declarativa quando aplicado a vários níveis da mesma classe.
Importante
Em .NET Framework 4, o suporte de tempo de execução foi removido impor Deny, RequestMinimum, RequestOptional, e solicitações de permissão de RequestRefuse .Essas solicitações não devem ser usadas em código que é baseado em .NET Framework 4 ou posterior.Para obter mais informações sobre isso e outras alterações, consulte Alterações na segurança do .NET Framework.
Classes, membros, e segurança declarativa
Quando há uma segurança declarativa para a mesma ação de segurança no nível da classe e o nível de método, segurança declarativa será aplicada de acordo com a seguinte tabela.
Ação de segurança |
Comportamento NET data provider do versão 2,0 da estrutura |
comportamento de.NET Framework 4 |
---|---|---|
Procura |
Os atributos de nível de método e os atributos de nível classe unioned juntos em um único conjunto de permissões para ambos os níveis. |
Nenhuma alteração de comportamento. |
Procura de link |
Os atributos de nível de método e os atributos de nível unioned classe. |
Nenhuma alteração de comportamento. |
Procura de herança |
Os atributos de nível classe exigem a permissão especificada para derivar da classe. Os atributos de nível de método exigem a permissão especificada para substituir o método em uma classe derivada. Como as demandas de herança têm significados diferentes para classes e métodos, as instruções podem ser aplicadas aos níveis da classe e o método independente. |
Nenhuma alteração de comportamento. |
Assert |
Os atributos de nível de método e os atributos de nível classe unioned juntos em um único conjunto de permissões para ambos os níveis. |
Nenhuma alteração de comportamento. |
Deny |
Os atributos de nível de método e os atributos de nível classe unioned juntos em um único conjunto de permissões para ambos os níveis. |
Obsoleto em .NET Framework 4. |
Licença apenas |
Os atributos de nível de método e os atributos de nível classe são cruzados juntos em um único conjunto de permissões para ambos os níveis. |
Nenhuma alteração de comportamento. |
Se as ações de segurança são diferentes (por exemplo, uma pesquisa na classe no nível com declarar ao nível de método), não haverá nenhuma interação qualquer e ambos são avaliados.
Classes aninhadas e segurança declarativa
Quando você aplicar a segurança declarativa a classes, não propaga a nenhum classes ou métodos aninhada de classes aninhadas. Por outro lado, quando você aplicar a segurança declarativa a classes ou métodos aninhados de uma classe aninhada, não se propaga às classes do pai de. Você deve aplicar a segurança declarativa a classes aninhadas como se fossem classes separadas.
O exemplo a seguir mostra uma permissão hipotética necessária na classe em nível de uma classe chamada Main. Dentro dessa classe, uma classe chamada Nested aninhada é definida. Neste exemplo, a procura 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()
{
}
}
}