Delen via


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 8 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

Voorbeeld

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; }
}