CA1044: Le proprietà non devono essere in sola scrittura
Proprietà | valore |
---|---|
ID regola | CA1044 |
Title | Le proprietà non devono essere in sola scrittura |
Categoria | Progettazione |
La correzione causa un'interruzione o meno | Interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Una proprietà dispone di una funzione di accesso impostata, ma non di una funzione di accesso get.
Per impostazione predefinita, questa regola esamina solo i tipi visibili esternamente, ma è configurabile.
Descrizione regola
Le funzioni di accesso Get forniscono l'accesso in lettura a una proprietà e le funzioni di accesso set forniscono l'accesso in scrittura. Sebbene la presenza di proprietà di sola lettura sia accettabile e spesso necessaria, le linee guida di progettazione proibiscono l'utilizzo di proprietà di sola scrittura. Ciò è dovuto al fatto che consentire a un utente di impostare un valore e quindi impedire all'utente di visualizzare il valore non fornisce alcuna sicurezza. Inoltre, senza accesso in lettura, lo stato degli oggetti condivisi non può essere visualizzato, il che ne limita l'utilità.
Come correggere le violazioni
Per correggere una violazione di questa regola, aggiungere una funzione di accesso get alla proprietà . In alternativa, se è necessario il comportamento di una proprietà di sola scrittura, valutare la possibilità di convertire questa proprietà in un metodo .
Quando eliminare gli avvisi
È consigliabile non eliminare gli avvisi da questa regola.
Configurare il codice da analizzare
Usare l'opzione seguente per configurare le parti della codebase in cui eseguire questa regola.
È possibile configurare questa opzione solo per questa regola, per tutte le regole a cui si applica o per tutte le regole in questa categoria (Progettazione) a cui si applica. Per altre informazioni, vedere Opzioni di configurazione delle regole di qualità del codice.
Includere superfici API specifiche
È possibile configurare le parti della codebase in modo da eseguire questa regola in base all'accessibilità. Ad esempio, per specificare che la regola deve essere eseguita solo sulla superficie dell'API non pubblica, aggiungere la coppia chiave-valore seguente a un file con estensione editorconfig nel progetto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Esempio
Nell'esempio seguente è BadClassWithWriteOnlyProperty
un tipo con una proprietà di sola scrittura. GoodClassWithReadWriteProperty
contiene il codice corretto.
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; }
}