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

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

ПримечаниеПримечание

В версии .NET Framework 4 представлена новая модель прозрачности.Модель Прозрачный с точки зрения безопасности код, уровень 2 определяет безопасный код с помощью атрибута SecurityCriticalAttribute или SecuritySafeCriticalAttribute.Для критически важного для безопасности кода требуется, чтобы и вызывающий объект, и наследующие ему объекты были полностью доверенными.Любой тип или член, наследующий критически важному для безопасности типу или члену, должен быть критически важным для безопасности или средне важным для безопасности кодом.Сборки, использующие более ранние версии правил управления доступом для кода (сборки уровня 1), могут вызывать критически важные для безопасности типы и члены уровня 2, только если они являются полностью доверенными.Однако типы и члены уровня 2 должны явным образом определять требования к наследованию, поскольку правила неявного наследования уровня 2 не применимы к вызывающему коду уровня 1.

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

Применение требования наследования к классу приводит к тому, что все классы, наследующие этот родительский класс, имели определенное разрешение. Например, если класс B должен наследовать класс A, а класс A защищен требованием наследования, то для возможности выполнения классу B должно быть выдано это разрешение. Если класс B получает это разрешение и наследует от класса A, то класс C также должен иметь разрешение, затребованное A, если он должен наследовать от класса B. Это требование может применяться только декларативно.

В следующем примере кода требование наследования используется для того, чтобы потребовать от любого класса, наследующего класс MyClass1, пользовательского разрешения CustomPermissionAttribute. Это разрешение — гипотетическое, его не существует в .NET Framework. Это требование осуществляется передачей атрибуту CustomPermissionAttribute значения перечисления 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.
    }
}

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

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

См. также

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

Расширение метаданных с помощью атрибутов

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

Создание собственных разрешений доступа к коду

Добавление поддержки декларативной безопасности

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