CA1044: Le proprietà non devono essere in sola scrittura
TypeName |
PropertiesShouldNotBeWriteOnly |
CheckId |
CA1044 |
Category |
Microsoft.Design |
Breaking Change |
Breaking |
Causa
La proprietà pubblica o protetta presenta una funzione di accesso set, ma non una funzione di accesso get.
Descrizione della regola
Le funzioni di accesso get forniscono accesso in lettura a una proprietà, mentre le funzioni di accesso set forniscono 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.Questo si verifica perché consentire a un utente di impostare un valore e poi impedirgli di visualizzarlo non offre alcuna garanzia di 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 il comportamento di una proprietà in sola scrittura è necessario, valutare la conversione di tale proprietà in un metodo.
Esclusione di avvisi
È consigliabile non escludere un avviso da questa regola.
Esempio
Nell'esempio riportato di seguito, BadClassWithWriteOnlyProperty è un tipo contenente una proprietà di sola scrittura.GoodClassWithReadWriteProperty contiene il codice corretto.
Imports System
Namespace DesignLibrary
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
Dim someName As String
Property Name As String
Get
Return someName
End Get
Set
someName = Value
End Set
End Property
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class BadClassWithWriteOnlyProperty
{
string someName;
// Violates rule PropertiesShouldNotBeWriteOnly.
public string Name
{
set
{
someName = value;
}
}
}
public class GoodClassWithReadWriteProperty
{
string someName;
public string Name
{
get
{
return someName;
}
set
{
someName = value;
}
}
}
}