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