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


CA1813: A nem hozzárendelt attribútumok elkerülése

Tulajdonság Érték
Szabályazonosító CA1813
Cím A nem hozzárendelt attribútumok elkerülése
Kategória Teljesítmény
A javítás kompatibilitástörő vagy nem törik Törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

A nyilvános típus öröklődik, System.Attributenem absztrakt, és nincs lezárva (NotInheritable a Visual Basicben).

Szabály leírása

A .NET metódusokat biztosít az egyéni attribútumok lekéréséhez. Ezek a metódusok alapértelmezés szerint az attribútumöröklési hierarchiában keresnek. Megkeresi például a megadott attribútumtípust, System.Attribute.GetCustomAttribute vagy bármely olyan attribútumtípust, amely kibővíti a megadott attribútumtípust. Az attribútum zárolása megszünteti a keresést az öröklési hierarchián keresztül, és javíthatja a teljesítményt.

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

A szabály megsértésének kijavításához zárja le az attribútumtípust, vagy tegye absztraktvá.

Mikor kell letiltani a figyelmeztetéseket?

A szabály figyelmeztetésének mellőzése biztonságos. Csak akkor tiltsa le, ha attribútumhierarchiát definiál, és nem tudja lezárni vagy absztrakcióvá tenni az attribútumot.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

#pragma warning disable CA1813
// The code that's violating the rule is on this line.
#pragma warning restore CA1813

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

[*.{cs,vb}]
dotnet_diagnostic.CA1813.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

Példa

Az alábbi példa egy olyan egyéni attribútumot mutat be, amely megfelel ennek a szabálynak.

// Satisfies rule: AvoidUnsealedAttributes.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public sealed class DeveloperAttribute : Attribute
{
    private string nameValue;
    public DeveloperAttribute(string name)
    {
        nameValue = name;
    }

    public string Name
    {
        get
        {
            return nameValue;
        }
    }
}
Imports System

Namespace ca1813

    ' Satisfies rule: AvoidUnsealedAttributes.
    <AttributeUsage(AttributeTargets.Class Or AttributeTargets.Struct)>
    Public NotInheritable Class DeveloperAttribute
        Inherits Attribute

        Public Sub New(name As String)
            Me.Name = name
        End Sub


        Public ReadOnly Property Name() As String
    End Class

End Namespace

Kapcsolódó információk