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