Поделиться через


Декларативная безопасность в области классов и членов

Обновлен: Ноябрь 2007

Декларативная безопасность может выполняться над классами, членами и вложенными классами. В этом разделе приводится общее описание правил, используемых для оценки декларативной безопасности в применении к различным уровням одного и того же класса.

Классы, члены и декларативная безопасность

Если для одного и того же действия по обеспечению безопасности декларативная безопасность применяется как на уровне класса, так и на уровне метода, ее применение соответствует следующей таблице.

Действие по обеспечению безопасности

.Поведение .NET Framework версий 1.0 и 1.1

Поведение .NET Framework версии 2.0

Требование

Атрибуты на уровне метода переопределяют атрибуты на уровне класса. (Если декларативное требование помещено и на уровне метода, то декларативное требование на уровне класса игнорируется.)

Атрибуты на уровне метода и на уровне класса объединяются и образуют единый набор разрешений для обоих уровней.

Требование связывания

Атрибуты на уровне метода и атрибуты на уровне класса объединяются.

Поведение не меняется.

Требование наследования

Атрибуты на уровне класса требуют указанного разрешения для обеспечения возможности наследовать данный класс.

Атрибуты на уровне метода требуют указанного разрешения для обеспечения возможности переопределять метод в производном классе.

Так как требования к наследованию имеют разное значение для классов и методов, объявления могут применяться независимо друг от друга как на уровне методов, так и на уровне класса.

Поведение не меняется.

Assert

Атрибуты на уровне метода переопределяют атрибуты на уровне класса.

Атрибуты на уровне метода и на уровне класса объединяются и образуют единый набор разрешений для обоих уровней.

Deny

Атрибуты на уровне метода переопределяют атрибуты на уровне класса.

Атрибуты на уровне метода и на уровне класса объединяются и образуют единый набор разрешений для обоих уровней.

Permit only

Атрибуты на уровне метода переопределяют атрибуты на уровне класса.

Пересечение атрибутов на уровне метода и на уровне класса используется в качестве единого набора разрешений для обоих уровней.

Если действия безопасности различны (например, требование на уровне класса с утверждением на уровне метода), между ними не существует какого бы то ни было взаимодействия и оцениваются оба.

Вложенные классы и декларативная безопасность

При применении декларативной безопасности к классам она не распространяется ни на какие вложенные классы или методы вложенных классов. И наоборот, при применении декларативной безопасности к вложенным классам или методам вложенного класса она не распространяется на родительские классы. Нужно применять декларативную безопасность к вложенным классам так, как если бы они были отдельными классами.

Следующий пример показывает гипотетическое разрешение, затребованное на уровне класса с именем 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()
        {   
        }
    }
}

См. также

Основные понятия

Требования безопасности

Другие ресурсы

Управление доступом для кода