Segurança declarativa usada com classes e escopo de membros
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.
Segurança declarativa de classes e membros
Quando houver segurança declarativa para a mesma ação de segurança no nível de classe e o nível de método, a segurança declarativa será aplicada de acordo com a tabela a seguir.
Ação de segurança |
Comportamento do .NET estrutura versão 1.0 e 1.1 |
Comportamento do .NET estrutura versão 2.0 |
---|---|---|
Por solicitação |
Os atributos em nível de método substituem os atributos em nível de classe.(Se uma demanda declarativa é colocada em nível de método, uma demanda de nível de classe declarativa será ignorada.) |
Atributos de nível de método e atributos de nível de classe são Unidos juntos em uma única permissão definida para dois níveis. |
Demanda de link |
Atributos de nível de método e atributos em nível de classe são Unidos. |
Nenhuma alterar no comportamento. |
Demanda de herança |
Os atributos em nível de classe precisarem da permissão especificada para derivar da classe. Os atributos em nível de método precisarem da permissão especificada para substituir o método em uma classe derivada. Como demandas de herança possuem significados diferentes para classes e métodos, declarações podem ser aplicadas independentemente para níveis de classe e método. |
Nenhuma alterar no comportamento. |
Declarar |
Os atributos em nível de método substituem os atributos em nível de classe. |
Atributos de nível de método e atributos de nível de classe são Unidos juntos em uma única permissão definida para dois níveis. |
Negar |
Os atributos em nível de método substituem os atributos em nível de classe. |
Atributos de nível de método e atributos de nível de classe são Unidos juntos em uma única permissão definida para dois níveis. |
Permitir somente |
Os atributos em nível de método substituem os atributos em nível de classe. |
Atributos de nível de método e atributos de nível de classe são interseção em um único conjunto de permissões para os dois níveis. |
Se as ações de segurança forem diferentes (por exemplo, uma demanda de nível de classe com uma declaração no nível de método), não há nenhuma interação que seja e ambos são avaliados.
Classes aninhadas e segurança declarativa
Quando você aplicar segurança declarativa para classes, ele não se propague para quaisquer classes aninhadas ou métodos de classes aninhadas.Por outro lado, quando você aplicar segurança declarativa classes aninhadas ou métodos de uma classe aninhada, ele não se propague para classes pai ou.Você deve aplicar a segurança declarativa a classes aninhadas sistema autônomo 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 é válido para a 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()
{
}
}
}