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


CA1019: Attribútumargumentumok kiegészítőinek definiálása

Tulajdonság Érték
Szabályazonosító CA1019
Cím Attribútumargumentumok kiegészítőinek definiálása
Kategória Design
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

A konstruktorban egy attribútum olyan argumentumokat határoz meg, amelyek nem rendelkeznek megfelelő tulajdonságokkal.

Szabály leírása

Az attribútumok olyan kötelező argumentumokat határozhatnak meg, amelyeket meg kell adni, amikor az attribútumot egy célra alkalmazza. Ezeket pozícióargumentumoknak is nevezik, mivel az attribútumkonstruktorok helyparaméterekként vannak megadva. Minden kötelező argumentum esetében az attribútumnak egy megfelelő írásvédett tulajdonságot is meg kell adnia, hogy az argumentum értéke lekérhető legyen a végrehajtáskor. Ez a szabály ellenőrzi, hogy az egyes konstruktorparaméterek esetében ön definiálta-e a megfelelő tulajdonságot.

Az attribútumok opcionális argumentumokat is definiálhatnak, amelyeket nevesített argumentumoknak is neveznek. Ezeket az argumentumokat a rendszer név alapján adja meg az attribútumkonstruktoroknak, és ennek megfelelő olvasási/írási tulajdonságmal kell rendelkeznie.

Kötelező és nem kötelező argumentumok esetén a megfelelő tulajdonságoknak és konstruktorparamétereknek ugyanazt a nevet kell használniuk, de eltérő burkolatot kell használniuk. A tulajdonságok Pascal-burkolatot használnak, a paraméterek pedig teveházat használnak.

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

A szabály megsértésének kijavításához adjon hozzá egy írásvédett tulajdonságot minden olyan konstruktorparaméterhez, amely nem rendelkezik ilyenrel.

Mikor kell letiltani a figyelmeztetéseket?

Ha nem szeretné, hogy a kötelező argumentum értéke lekérhető legyen, tiltsa le a szabály figyelmeztetését.

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 CA1019
// The code that's violating the rule is on this line.
#pragma warning restore CA1019

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.CA1019.severity = none

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

Példák

Egyéni attribútumok

Az alábbi példa két attribútumot mutat be, amelyek kötelező (pozíció) paramétert határoznak meg. Az attribútum első implementációja helytelenül van definiálva. A második implementáció helyes.

// Violates rule: DefineAccessorsForAttributeArguments.
[AttributeUsage(AttributeTargets.All)]
public sealed class BadCustomAttribute : Attribute
{
    string _data;

    // Missing the property that corresponds to 
    // the someStringData constructor parameter.

    public BadCustomAttribute(string someStringData)
    {
        _data = someStringData;
    }
}

// Satisfies rule: Attributes should have accessors for all arguments.
[AttributeUsage(AttributeTargets.All)]
public sealed class GoodCustomAttribute : Attribute
{
    public GoodCustomAttribute(string someStringData)
    {
        SomeStringData = someStringData;
    }

    //The constructor parameter and property
    //name are the same except for case.

    public string SomeStringData { get; }
}
Imports System

Namespace ca1019

    ' Violates rule: DefineAccessorsForAttributeArguments.
    <AttributeUsage(AttributeTargets.All)>
    Public NotInheritable Class BadCustomAttribute
        Inherits Attribute
        Private data As String

        ' Missing the property that corresponds to 
        ' the someStringData parameter.
        Public Sub New(someStringData As String)
            data = someStringData
        End Sub 'New
    End Class 'BadCustomAttribute

    ' Satisfies rule: Attributes should have accessors for all arguments.
    <AttributeUsage(AttributeTargets.All)>
    Public NotInheritable Class GoodCustomAttribute
        Inherits Attribute

        Public Sub New(someStringData As String)
            Me.SomeStringData = someStringData
        End Sub 'New

        'The constructor parameter and property
        'name are the same except for case.

        Public ReadOnly Property SomeStringData() As String
    End Class

End Namespace

Pozíció- és elnevezett argumentumok

A pozíció- és elnevezett argumentumok egyértelművé teszik a kódtár felhasználói számára, hogy mely argumentumok kötelezőek az attribútumhoz, és mely argumentumok nem kötelezőek.

Az alábbi példa egy olyan attribútum implementációját mutatja be, amely pozíció- és elnevezett argumentumokkal is rendelkezik:

[AttributeUsage(AttributeTargets.All)]
public sealed class GoodCustomAttribute : Attribute
{
    public GoodCustomAttribute(string mandatoryData)
    {
        MandatoryData = mandatoryData;
    }

    public string MandatoryData { get; }

    public string? OptionalData { get; set; }
}

Az alábbi példa bemutatja, hogyan alkalmazhatja az egyéni attribútumot két tulajdonságra:

[GoodCustomAttribute("ThisIsSomeMandatoryData", OptionalData = "ThisIsSomeOptionalData")]
public string? MyProperty { get; set; }

[GoodCustomAttribute("ThisIsSomeMoreMandatoryData")]
public string? MyOtherProperty { get; set; }

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

Kapcsolódó információk