CA1044: Eigenschappen mogen niet alleen worden geschreven
Eigenschappen | Weergegeven als |
---|---|
Regel-id | CA1044 |
Titel | Eigenschappen mogen niet alleen worden geschreven |
Categorie | Ontwerpen |
Oplossing is brekend of niet-brekend | Breken |
Standaard ingeschakeld in .NET 9 | Nee |
Oorzaak
Een eigenschap heeft een set accessor, maar geen get accessor.
Deze regel kijkt standaard alleen naar extern zichtbare typen, maar dit kan worden geconfigureerd.
Beschrijving van regel
Get accessors bieden leestoegang tot een eigenschap en instellen dat accessors schrijftoegang bieden. Hoewel het acceptabel en vaak nodig is om een alleen-lezen eigenschap te hebben, verbieden de ontwerprichtlijnen het gebruik van alleen-schrijven-eigenschappen. Dit komt doordat een gebruiker een waarde kan instellen en vervolgens verhindert dat de gebruiker de waarde bekijkt, geen beveiliging biedt. Ook, zonder leestoegang, kan de status van gedeelde objecten niet worden bekeken, waardoor de bruikbaarheid ervan wordt beperkt.
Schendingen oplossen
Als u een schending van deze regel wilt oplossen, voegt u een get accessor toe aan de eigenschap. Als het gedrag van een eigenschap alleen-schrijven nodig is, kunt u deze eigenschap ook converteren naar een methode.
Wanneer waarschuwingen onderdrukken
Het is raadzaam om waarschuwingen van deze regel niet te onderdrukken.
Code configureren om te analyseren
Gebruik de volgende optie om te configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd.
U kunt deze optie configureren voor alleen deze regel, voor alle regels waarop deze van toepassing is, of voor alle regels in deze categorie (ontwerp) waarop deze van toepassing is. Zie de configuratieopties voor de codekwaliteitsregel voor meer informatie.
Specifieke API-oppervlakken opnemen
U kunt instellen op welke onderdelen van uw codebase deze regel moet worden uitgevoerd, op basis van hun toegankelijkheid. Als u bijvoorbeeld wilt opgeven dat de regel alleen moet worden uitgevoerd op het niet-openbare API-oppervlak, voegt u het volgende sleutel-waardepaar toe aan een .editorconfig-bestand in uw project:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Opmerking
In het volgende voorbeeld BadClassWithWriteOnlyProperty
is een type met een eigenschap alleen-schrijven. GoodClassWithReadWriteProperty
bevat de gecorrigeerde code.
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; }
}