CA1044: Las propiedades no deben ser de solo escritura
Nombre de tipo |
PropertiesShouldNotBeWriteOnly |
Identificador de comprobación |
CA1044 |
Categoría |
Microsoft.Design |
Cambio problemático |
Sí |
Motivo
La propiedad pública o protegida tiene un descriptor de acceso set pero no tiene un descriptor de acceso get.
Descripción de la regla
Los descriptores de acceso get proporcionan acceso de lectura a una propiedad y los de acceso set, 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 permitir que un usuario establezca un valor y a continuación impedir que el usuario vea el 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.O bien, si el comportamiento de una propiedad de sólo escritura es necesario, piense en convertirla en un método.
Cuándo suprimir advertencias
Se recomienda que no suprima ninguna advertencia de esta regla.
Ejemplo
En el ejemplo siguiente, la propiedad BadClassWithWriteOnlyProperty se establece con la propiedad de solo escritura.GoodClassWithReadWriteProperty contiene el código corregido.
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;
}
}
}
}