Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA1044 |
| Titel | Eigenschappen mogen niet alleen schrijfbaar zijn |
| Categorie | Ontwerpen |
| Fix kan brekend of niet-brekend zijn | Onderbreking |
| Standaard ingeschakeld in .NET 10 | Nee |
| Toepasselijke talen | C# en Visual Basic |
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 set-accessors bieden schrijftoegang. 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.
Hoe schendingen op te lossen
Als u een schending van deze regel wilt oplossen, voegt u een get accessor toe aan de eigenschap. Als het gedrag van een alleen-schrijven-eigenschap nodig is, denk erover na om deze eigenschap om te zetten 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 configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd, op basis van hun toegankelijkheid, door de optie api_surface in te stellen. 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
Notitie
Vervang het XXXX deel van CAXXXX door de id van de toepasselijke regel.
Voorbeeld
In het volgende voorbeeld, BadClassWithWriteOnlyProperty is een type met een alleen-schrijfbare eigenschap.
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; }
}