用于类和成员范围的声明式安全

更新:2007 年 11 月

可以在类、成员和嵌套类上执行声明式安全。本节概述当声明式安全应用于同一个类的多个级别时用于计算声明式安全的规则。

类、成员和声明式安全

当类级和方法级都存在同一安全操作的声明性安全性时,声明性安全性将根据下表进行应用。

安全操作

.NET Framework 1.0 和 1.1 版行为

NET Framework 2.0 版行为

要求

方法级属性重写类级属性。(如果声明性要求被置于方法级,则类级声明性要求将被忽略。)

方法级属性和类级属性形成并集,作为针对这两种级别的一个单独的权限集。

链接要求

方法级属性和类级属性形成并集。

行为无更改。

继承要求

类级属性为了从类进行派生需要指定的权限。

方法级属性为了在派生类中重写方法需要指定的权限。

因为继承要求对于类和方法具有不同的含义,所以声明可以同时独立地应用于类级别和方法级别。

行为无更改。

断言

方法级属性重写类级属性。

方法级属性和类级属性形成并集,作为针对这两种级别的一个单独的权限集。

拒绝

方法级属性重写类级属性。

方法级属性和类级属性形成并集,作为针对这两种级别的一个单独的权限集。

仅允许

方法级属性重写类级属性。

方法级属性和类级属性形成交集,作为针对这两种级别的一个单独的权限集。

如果安全操作不同(例如应用于类级别的要求和应用于方法级别的断言),则无论如何都不会互相影响,将对两个操作都进行计算。

嵌套类和声明式安全

当将声明式安全应用于类时,它不会传播到任何嵌套类或嵌套类的方法。反过来,当将声明式安全应用于嵌套类或嵌套类的方法时,它也不会传播到父类。当将声明式安全应用于嵌套类时,您应该将它们当做分开的类对待。

下面的示例显示了在名为 Main 的类的类级别上要求的假设的权限。在该类中,定义了一个名为 Nested 的嵌套类。在本例中,要求不应用于嵌套类。

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

请参见

概念

安全要求

其他资源

代码访问安全性