Las propiedades no deben ser de sólo escritura
Actualización: noviembre 2007
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. Mientras que es aceptable y, a menudo, necesario tener una propiedad de sólo lectura, las instrucciones de diseño prohíben utilizar propiedades de sólo escritura porque permiten al usuario establecer un valor y si se evita 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, BadClassWithWriteOnlyProperty es un tipo con una propiedad de sólo 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;
}
}
}
}