CA1044: Egenskaper ska inte bara skrivas
Property | Värde |
---|---|
Regel-ID | CA1044 |
Title | Egenskaper får inte bara skrivas |
Kategori | Designa |
Korrigeringen är icke-bakåtkompatibel | Brott |
Aktiverad som standard i .NET 9 | Nej |
Orsak
En egenskap har en angivet accessor men inte en get-accessor.
Som standard tittar den här regeln bara på externt synliga typer, men det kan konfigureras.
Regelbeskrivning
Get accessors ger läsåtkomst till en egenskap och set-åtkomsten ger skrivåtkomst. Även om det är acceptabelt och ofta nödvändigt att ha en skrivskyddad egenskap, förbjuder designriktlinjerna användning av skrivskyddade egenskaper. Det beror på att det inte ger någon säkerhet att låta en användare ange ett värde och sedan hindra användaren från att visa värdet. Utan läsåtkomst kan inte heller tillståndet för delade objekt visas, vilket begränsar deras användbarhet.
Så här åtgärdar du överträdelser
Om du vill åtgärda ett brott mot den här regeln lägger du till en get-åtkomst till egenskapen. Om beteendet för en skrivskyddad egenskap är nödvändig kan du också överväga att konvertera den här egenskapen till en metod.
När du ska ignorera varningar
Vi rekommenderar att du inte undertrycker varningar från den här regeln.
Konfigurera kod för analys
Använd följande alternativ för att konfigurera vilka delar av kodbasen som regeln ska köras på.
Du kan konfigurera det här alternativet för bara den här regeln, för alla regler som gäller för eller för alla regler i den här kategorin (design) som den gäller för. Mer information finns i Konfigurationsalternativ för kodkvalitetsregel.
Inkludera specifika API-ytor
Du kan konfigurera vilka delar av kodbasen som ska köras med den här regeln baserat på deras tillgänglighet. Om du till exempel vill ange att regeln endast ska köras mot den icke-offentliga API-ytan lägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Exempel
I följande exempel BadClassWithWriteOnlyProperty
är en typ med en skrivskyddad egenskap. GoodClassWithReadWriteProperty
innehåller den korrigerade koden.
Imports System
Namespace ca1044
Public Class BadClassWithWriteOnlyProperty
Dim someName As String
' Violates rule PropertiesShouldNotBeWriteOnly.
WriteOnly Property Name As String
Set
someName = Value
End Set
End Property
End Class
Public Class GoodClassWithReadWriteProperty
Property Name As String
End Class
End Namespace
public class BadClassWithWriteOnlyProperty
{
string? _someName;
// Violates rule PropertiesShouldNotBeWriteOnly.
public string? Name
{
set
{
_someName = value;
}
}
}
public class GoodClassWithReadWriteProperty
{
public string? Name { get; set; }
}