CA2126:必須同時具有型別連結要求和繼承要求

型別名稱

TypeLinkDemandsRequireInheritanceDemands

CheckId

CA2126

分類

Microsoft.Security

中斷變更

中斷

原因

公用的 (Public) 非密封型別是以連結要求保護且具有可覆寫的方法,而型別或方法都不是以繼承 (Inheritance) 需求保護的。

規則描述

方法的立即呼叫端需具有特定的使用權限,才能使用方法的連結要求或它的宣告型別。覆寫方法需具有特定的使用權限,才能使用方法的繼承要求。衍生類別需具有特定的使用權限,才能使用型別的繼承要求。

如何修正違規

若要修正此規則的違規情形,利用與連結要求具相同使用權限的繼承要求來保護型別或方法。

隱藏警告的時機

請勿隱藏此規則的警告。

範例

下列範例顯示違反規則的型別。

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

相關規則

CA2108:必須檢查實值型別上的宣告式安全性

CA2112:受保護型別不應公開欄位

CA2122:不要間接公開具有連結要求的方法

CA2123:覆寫連結要求應該與基底相同

請參閱

概念

繼承要求

連結要求

要求

其他資源

安全程式碼撰寫方針