Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.

Declarative Security Used with Class and Member Scope

Declarative security can be performed on classes, members, and nested classes. This section outlines the rules used to evaluate declarative security when applied to multiple levels of the same class.

When there is declarative security for the same security action on both the class level and the method level, the declarative security will be applied according to the following table.

Security action

.NET Framework version 1.0 and 1.1 behavior

NET Framework version 2.0 behavior

Demand

Method-level attributes override class-level attributes. (If a declarative demand is placed on the method level, a class-level declarative demand will be ignored.)

Method-level attributes and class-level attributes are unioned together into a single permission set for both levels.

Link demand

Method-level attributes and class-level attributes are unioned.

No change in behavior.

Inheritance demand

Class-level attributes require the specified permission in order to derive from the class.

Method-level attributes require the specified permission in order to override the method in a derived class.

Because inheritance demands have different meanings for classes and methods, declarations can be applied to both the class and method levels independently.

No change in behavior.

Assert

Method-level attributes override class-level attributes.

Method-level attributes and class-level attributes are unioned together into a single permission set for both levels.

Deny

Method-level attributes override class-level attributes.

Method-level attributes and class-level attributes are unioned together into a single permission set for both levels.

Permit only

Method-level attributes override class-level attributes.

Method-level attributes and class-level attributes are intersected together into a single permission set for both levels.

If the security actions are different (for example, a demand at class level with an assert at method level), there is no interaction whatsoever and both are evaluated.

When you apply declarative security to classes, it does not propagate to any nested classes or methods of nested classes. Conversely, when you apply declarative security to nested classes or methods of a nested class, it does not propagate to the parent classes either. You should apply declarative security to nested classes as if they were separate classes.

The following example shows a hypothetical permission demanded on the class level of a class called Main. Within that class, a nested class called Nested is defined. In this example, the demand does not apply to the nested class.

<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

Community Additions

ADD
Show:
© 2015 Microsoft