Peticiones de herencia

Cuando se aplican a clases, las peticiones de herencia tienen un significado distinto que cuando se aplican a métodos. Es posible colocar peticiones de herencia en el nivel de clase con el fin de garantizar que sólo se pueda heredar de la clase el código que tenga el permiso especificado. Para colocar peticiones de herencia en métodos, es necesario que el código posea el permiso especificado para reemplazar el método.

NotaNota

En .NET Framework versión 4, se ha introducido un nuevo modelo de transparencia.El modelo Código transparente en seguridad, nivel 2 identifica código seguro con el atributo SecurityCriticalAttribute o SecuritySafeCriticalAttribute.En el caso de código crítico para la seguridad, tanto los llamadores como los desarrolladores de herederos deben ser de plena confianza.Cualquier tipo o miembro que herede de un tipo o miembro crítico para la seguridad debe ser crítico para la seguridad o crítico para la seguridad y disponible desde código transparente.Los ensamblados que usan las reglas de seguridad de acceso del código anteriores (nivel 1) pueden llamar a los tipos y miembros críticos para la seguridad del nivel 2, siempre y cuando sean de plena confianza.Sin embargo, los tipos y miembros del nivel 2 deben identificar específicamente las peticiones de herencia porque las reglas de herencia implícita del nivel 2 no se aplican a los llamadores del nivel 1.

Peticiones de herencia de clases

Cuando se aplica a una clase, una petición heredada exige que todas las clases derivadas de la clase primaria tengan el permiso especificado. Por ejemplo, si la clase B se va a heredar de la clase A y la clase A está protegida por una petición de herencia, debe concederse a B ese permiso para que pueda ejecutarse. Si se ha concedido ese permiso a la clase B y se deriva de la clase A, la clase C también debe tener el permiso solicitado por A, si se va a derivar de B. Esta petición solo se puede aplicar mediante declaración.

En el ejemplo de código siguiente, se utiliza una petición de herencia para exigir que cualquier clase que se herede de MyClass1 tenga el permiso personalizado CustomPermissionAttribute. Este permiso es un permiso personalizado hipotético y no existe en .NET Framework. La petición se realiza pasando CustomPermissionAttribute a un valor de enumeración SecurityAction.InheritanceDemand.

<CustomPermissionAttribute(SecurityAction.InheritanceDemand)> _
Public Class MyClass1
    Public Sub New()
    End Sub 
   
    Public Overridable Function ReadData() As String
        ' Access a custom resource.
    End Function
End Class    
[CustomPermissionAttribute(SecurityAction.InheritanceDemand)]
public class MyClass
{
    public MyClass()
    {    
    }   

    public virtual string ReadData()
    {
        // Access a custom resource.
    }
}

Peticiones de herencia de métodos

Colocar una petición de herencia en un método estático de la clase base no tendrá ningún efecto sobre las clases derivadas ya que estos métodos no están relacionados. Sin embargo, colocarla en algún método no estático de la clase base tendrá el mismo efecto que una petición de herencia en la clase. Todos los métodos de la clase derivada, incluido su constructor, deberán cumplir la petición de herencia.

Vea también

Conceptos

Extender metadatos mediante atributos

Peticiones de seguridad

Crear permisos de acceso a código propios

Agregar compatibilidad con la seguridad declarativa

Seguridad de acceso del código