Запросы компоновки типа требуют запросов наследования
Обновлен: Ноябрь 2007
TypeName |
TypeLinkDemandsRequireInheritanceDemands |
CheckId |
CA2126 |
Категория |
Microsoft.Security |
Критическое изменение |
Критическое |
Причина
Открытый незапечатанный тип защищен с помощью запроса компоновки, имеет переопределяемый метод; ни тип, ни метод не защищены с помощью запроса наследования.
Описание правила
Требование компоновки в методе или его объявляющем типе требует наличия указанного разрешения для непосредственного вызывающего метода. Требование наследования в методе требует наличия указанного разрешения для переопределяющего метода. Требование наследования в типе требует наличия указанного разрешения для производного класса.
Устранение нарушений
Чтобы устранить нарушение данного правила, защитите тип или метод с требованием наследования для того же разрешения, что и для требования компоновки.
Отключение предупреждений
Для этого правила отключать вывод предупреждений не следует.
Пример
В следующем примере показан тип, который нарушает данное правило.
Imports System
Imports System.Security.Permissions
Namespace SecurityLibrary
<EnvironmentPermission(SecurityAction.LinkDemand, Read:="PATH")> _
Public Class TypesWithLinkDemands
Protected Overridable Sub UnsecuredMethod()
End Sub
<EnvironmentPermission(SecurityAction.InheritanceDemand, Read:="PATH")> _
Protected Overridable Sub SecuredMethod()
End Sub
End Class
End Namespace
using System;
using System.Security.Permissions;
namespace SecurityLibrary
{
[EnvironmentPermission(SecurityAction.LinkDemand, Read = "PATH")]
public class TypesWithLinkDemands
{
public virtual void UnsecuredMethod() {}
[EnvironmentPermission(SecurityAction.InheritanceDemand, Read = "PATH")]
public virtual void SecuredMethod() { }
}
}
using namespace System;
using namespace System::Security::Permissions;
namespace SecurityLibrary
{
[EnvironmentPermission(SecurityAction::LinkDemand, Read = "PATH")]
public ref class TypesWithLinkDemands
{
protected:
virtual void UnsecuredMethod() {}
[EnvironmentPermission(SecurityAction::InheritanceDemand,
Read = "PATH")]
virtual void SecuredMethod() {}
};
}
Связанные правила
Проверьте объявляемые параметры безопасности типов значений
Защищенные типы не должны предоставлять поля
Не используйте косвенное представление методов с запросами компоновки
Запросы ссылки переопределения должны быть идентичны базовым