Seguridad declarativa utilizada con ámbito de clase y miembro

La seguridad declarativa se puede utilizar en clases, miembros y clases anidadas. En esta sección se describen las reglas utilizadas para evaluar la seguridad declarativa cuando se aplica a múltiples niveles de la misma clase.

Clases, miembros y seguridad declarativa

Cuando exista seguridad declarativa para la misma acción de seguridad tanto en el nivel de clase como en el nivel de método, la seguridad declarativa se aplicará conforme a la siguiente tabla.

Acción de seguridad Comportamiento en las versiones 1.0 y 1.1 de .NET Framework Comportamiento en la versión 2.0 de .NET Framework

Petición

Los atributos de nivel de método reemplazan a los atributos de nivel de clase. (Si se coloca una petición declarativa en el nivel de método, se omitirá cualquier petición declarativa de nivel de clase.)

Los atributos de nivel de método y los atributos de nivel de clase se unen en un único conjunto de permisos para ambos niveles.

Petición de vínculo

Los atributos de nivel de método y los atributos de nivel de clase se unen.

Ningún cambio de comportamiento.

Petición de herencia

Los atributos de nivel de clase requieren el permiso especificado para poder derivar de la clase.

Los atributos de nivel de método requieren el permiso especificado para poder reemplazar el método en una clase derivada.

Como las peticiones de herencia tienen distintos significados para las clases y los métodos, las declaraciones pueden aplicarse a los niveles de clase y método por separado.

Ningún cambio de comportamiento.

Assert

Los atributos de nivel de método reemplazan a los atributos de nivel de clase.

Los atributos de nivel de método y los atributos de nivel de clase se unen en un único conjunto de permisos para ambos niveles.

Deny

Los atributos de nivel de método reemplazan a los atributos de nivel de clase.

Los atributos de nivel de método y los atributos de nivel de clase se unen en un único conjunto de permisos para ambos niveles.

Sólo con permisos

Los atributos de nivel de método reemplazan a los atributos de nivel de clase.

Los atributos de nivel de método y los atributos de nivel de clase se intersecan en un único conjunto de permisos para ambos niveles.

Si las acciones de seguridad son diferentes (por ejemplo, una petición en el nivel de clase con una aserción en el nivel de método), no hay ninguna interacción en absoluto y se evalúan los dos niveles.

Clases anidadas y seguridad declarativa

Cuando se aplica la seguridad declarativa a las clases, no se propaga a ninguna clase anidada ni método de clases anidadas. A la inversa, cuando se aplica la seguridad declarativa a las clases anidadas o a métodos de una clase anidada, tampoco se propaga a las clases principales. La seguridad declarativa se debe aplicar a las clases anidadas como si fuesen clases separadas.

En el ejemplo siguiente se muestra un permiso hipotético exigido en el nivel de clase de una clase denominada Main. Dentro de esa clase, se define una clase anidada denominada Nested. En este ejemplo, la petición no se aplica a la clase anidada.

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

Vea también

Conceptos

Peticiones de seguridad

Otros recursos

Seguridad de acceso a código