Compartir a través de


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.

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 la clase B recibe ese permiso y se deriva de la clase A, entonces la clase C también debe tener el permiso exigido por A si se va a derivar de B. Esta petición se puede aplicar únicamente de forma declarativa.

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 System.Security.Permissions.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

Peticiones de seguridad
Crear permisos de acceso a código propios
Agregar compatibilidad con la seguridad declarativa

Otros recursos

Extender metadatos mediante atributos
Seguridad de acceso a código