Megosztás a következőn keresztül:


CA1018: Attribútumok megjelölése az AttributeUsageAttribute használatával

Tulajdonság Érték
Szabályazonosító CA1018
Cím Attribútumok megjelölése az AttributeUsageAttribute használatával
Kategória Design
A javítás kompatibilitástörő vagy nem törik Törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

Az System.AttributeUsageAttribute attribútum nem szerepel az egyéni attribútumban.

Szabály leírása

Ha egyéni attribútumot határoz meg, jelölje meg a forráskódban az egyéni attribútum alkalmazhatósági helyére való hivatkozással AttributeUsageAttribute . Az attribútum jelentése és rendeltetése határozza meg az attribútum érvényes helyét a kódban. Meghatározhat például egy attribútumot, amely azonosítja azt a személyt, aki felelős az egyes típusok karbantartásáért és fejlesztéséért egy tárban, és hogy a felelősség mindig a típus szintjén van hozzárendelve. Ebben az esetben a fordítóknak engedélyezniük kell az attribútumot az osztályokon, enumerálásokon és felületeken, de nem engedélyezhetik metódusokon, eseményeken vagy tulajdonságokon. A szervezeti szabályzatok és eljárások határozzák meg, hogy az attribútum engedélyezve legyen-e a szerelvényeken.

Az System.AttributeTargets enumerálás határozza meg az egyéni attribútumokhoz megadható célokat. Ha kihagyjaAttributeUsageAttribute, az egyéni attribútum az enumerálás értéke AttributeTargets által All meghatározott összes célra érvényes lesz.

Szabálysértések kijavítása

A szabály megsértésének kijavításához adja meg az attribútum céljait a használatával AttributeUsageAttribute. Tekintse meg a következő példát.

Mikor kell letiltani a figyelmeztetéseket?

Az üzenet kizárása helyett ki kell javítania a szabály megsértését. Még ha az attribútum öröklődik AttributeUsageAttributeis, az attribútumnak jelen kell lennie a kódkarbantartás egyszerűsítése érdekében.

Példa

Az alábbi példa két attribútumot határoz meg. BadCodeMaintainerAttribute helytelenül kihagyja az AttributeUsageAttribute utasítást, és GoodCodeMaintainerAttribute helyesen implementálja az ebben a szakaszban korábban ismertetett attribútumot. (A tulajdonságot DeveloperName a CA1019 tervezési szabály megköveteli: Attribútumargumentumok kiegészítőinek definiálása, és a teljesség érdekében szerepel benne.)

using System;

namespace ca1018
{
    // Violates rule: MarkAttributesWithAttributeUsage.
    public sealed class BadCodeMaintainerAttribute : Attribute
    {
        public BadCodeMaintainerAttribute(string developerName)
        {
            DeveloperName = developerName;
        }
        public string DeveloperName { get; }
    }

    // Satisfies rule: Attributes specify AttributeUsage.
    // This attribute is valid for type-level targets.
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate)]
    public sealed class GoodCodeMaintainerAttribute : Attribute
    {
        public GoodCodeMaintainerAttribute(string developerName)
        {
            DeveloperName = developerName;
        }
        public string DeveloperName { get; }
    }
}
Imports System

Namespace ca1018

    ' Violates rule: MarkAttributesWithAttributeUsage.
    Public NotInheritable Class BadCodeMaintainerAttribute
        Inherits Attribute

        Public Sub New(developerName As String)
            Me.DeveloperName = developerName
        End Sub 'New

        Public ReadOnly Property DeveloperName() As String
    End Class

    ' Satisfies rule: Attributes specify AttributeUsage.
    ' The attribute is valid for type-level targets.
    <AttributeUsage(AttributeTargets.Class Or AttributeTargets.Enum Or
   AttributeTargets.Interface Or AttributeTargets.Delegate)>
    Public NotInheritable Class GoodCodeMaintainerAttribute
        Inherits Attribute

        Public Sub New(developerName As String)
            Me.DeveloperName = developerName
        End Sub 'New

        Public ReadOnly Property DeveloperName() As String
    End Class

End Namespace

Kapcsolódó információk