CA1019: Accessors definiëren voor kenmerkargumenten
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1019 |
Titel | Accessors definiëren voor kenmerkargumenten |
Categorie | Ontwerpen |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
In de constructor definieert een kenmerk argumenten die geen bijbehorende eigenschappen hebben.
Beschrijving van regel
Kenmerken kunnen verplichte argumenten definiëren die moeten worden opgegeven wanneer u het kenmerk toepast op een doel. Deze worden ook wel positionele argumenten genoemd, omdat ze worden geleverd aan kenmerkconstructors als positionele parameters. Voor elk verplicht argument moet het kenmerk ook een bijbehorende alleen-lezen-eigenschap opgeven, zodat de waarde van het argument tijdens de uitvoering kan worden opgehaald. Met deze regel wordt gecontroleerd of u voor elke constructorparameter de bijbehorende eigenschap hebt gedefinieerd.
Kenmerken kunnen ook optionele argumenten definiëren, die ook wel benoemde argumenten worden genoemd. Deze argumenten worden op naam opgegeven voor kenmerkconstructors en moeten een bijbehorende eigenschap lezen/schrijven hebben.
Voor verplichte en optionele argumenten moeten de bijbehorende eigenschappen en constructorparameters dezelfde naam maar verschillende hoofdletters gebruiken. Eigenschappen gebruiken Pascal-behuizing en parameters maken gebruik van kameelbehuizing.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, voegt u een alleen-lezen eigenschap toe voor elke constructorparameter die er geen heeft.
Wanneer waarschuwingen onderdrukken
Onderdrukt een waarschuwing van deze regel als u niet wilt dat de waarde van het verplichte argument kan worden opgehaald.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1019
// The code that's violating the rule is on this line.
#pragma warning restore CA1019
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none
ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1019.severity = none
Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.
Voorbeelden
Aangepaste kenmerken
In het volgende voorbeeld ziet u twee kenmerken waarmee een verplichte (positionele) parameter wordt gedefinieerd. De eerste implementatie van het kenmerk is onjuist gedefinieerd. De tweede implementatie is juist.
// 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
Positionele en benoemde argumenten
Positionele en benoemde argumenten maken het duidelijk voor consumenten van uw bibliotheek welke argumenten verplicht zijn voor het kenmerk en welke argumenten optioneel zijn.
In het volgende voorbeeld ziet u een implementatie van een kenmerk met zowel positionele als benoemde argumenten:
[AttributeUsage(AttributeTargets.All)]
public sealed class GoodCustomAttribute : Attribute
{
public GoodCustomAttribute(string mandatoryData)
{
MandatoryData = mandatoryData;
}
public string MandatoryData { get; }
public string? OptionalData { get; set; }
}
In het volgende voorbeeld ziet u hoe u het aangepaste kenmerk toepast op twee eigenschappen:
[GoodCustomAttribute("ThisIsSomeMandatoryData", OptionalData = "ThisIsSomeOptionalData")]
public string? MyProperty { get; set; }
[GoodCustomAttribute("ThisIsSomeMoreMandatoryData")]
public string? MyOtherProperty { get; set; }
Gerelateerde regels
CA1813: Niet-verzegelde kenmerken voorkomen