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:覆寫連結要求應該與基底相同

請參閱

概念

安全程式碼撰寫方針

繼承要求

連結要求

要求