CA1044: Las propiedades no deben ser de solo escritura
Propiedad | Value |
---|---|
Identificador de la regla | CA1044 |
Título | Las propiedades no deben ser de solo escritura |
Categoría | Diseño |
La corrección es problemática o no problemática | Problemático |
Habilitado de forma predeterminada en .NET 9 | No |
Causa
Una propiedad tiene un descriptor de acceso set, pero no un descriptor de acceso get.
De forma predeterminada, esta regla solo examina los tipos visibles externamente, pero es configurable.
Descripción de la regla
Los descriptores de acceso get proporcionan acceso de lectura a una propiedad y los descriptores de acceso set proporcionan acceso de escritura. Aunque es aceptable y a menudo necesario tener una propiedad de solo lectura, las directrices de diseño prohíben el uso de propiedades de solo escritura. Esto es porque si se deja que un usuario configure un valor, y después se impide que el usuario vea ese valor, no proporciona ninguna seguridad. Además, sin acceso de lectura, no se puede ver el estado de los objetos compartidos, lo que limita su utilidad.
Cómo corregir infracciones
Para corregir una infracción de esta regla, agregue un descriptor de acceso get a la propiedad. Como alternativa, si el comportamiento de una propiedad de solo escritura es necesario, considere la posibilidad de convertir esta propiedad en un método.
Cuándo suprimir las advertencias
Se recomienda no suprimir las advertencias de esta regla.
Configuración del código para analizar
Use la opción siguiente para configurar en qué partes del código base ejecutar esta regla.
Puede configurar esta opción solo para esta regla, para todas las reglas a las que se aplica o para todas las reglas de esta categoría (Diseño) a las que se aplica. Para más información, vea Opciones de configuración de reglas de calidad de código.
Incluir superficies de API específicas
Puede configurar en qué partes del código base ejecutar esta regla, en función de su accesibilidad. Por ejemplo, para especificar que la regla solo se debe ejecutar en la superficie de API no públicas, agregue el siguiente par clave-valor a un archivo .editorconfig en el proyecto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Ejemplo
En el ejemplo siguiente, BadClassWithWriteOnlyProperty
es un tipo con una propiedad de solo escritura. GoodClassWithReadWriteProperty
contiene el código corregido.
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; }
}