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


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

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

Важно!

В версии .NET Framework 4 удалена поддержка среды выполнения для принудительного применения запросов разрешений Deny, RequestMinimum, RequestOptional и RequestRefuse.Эти запросы нельзя использовать в коде, основанном на .NET Framework 4 или более поздних версиях.Дополнительные сведения об этом и других изменениях см. в разделе Изменения системы безопасности в .NET Framework.

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

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

Операция безопасности

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

Поведение .NET Framework 4

Требование

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

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

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

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

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

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

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

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

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

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

Assert

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

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

Запрет

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

Устарел в .NET Framework 4.

Только разрешение

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

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

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

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

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

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

См. также

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

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

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

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