CA1044: Propriedades não devem ser somente gravação
TypeName |
PropertiesShouldNotBeWriteOnly |
CheckId |
CA1044 |
<strong>Categoria</strong> |
Microsoft.design |
Alteração significativa |
Quebrando |
Causa
A propriedade pública ou protegida tem um assessor set, mas não tem um acessador get.
Descrição da regra
Obtenha acessadores fornecem acesso a uma propriedade de leitura e acessadores set fornecem acesso de gravação. Embora seja aceitável e freqüentemente é necessário ter uma propriedade somente leitura, as diretrizes de design proíbem o uso de propriedades somente para gravação. Isso ocorre porque a permitir que um usuário definir um valor e, em seguida, impedindo que o usuário exibir o valor não fornece nenhuma segurança. Além disso, sem acesso de leitura, o estado de objetos compartilhados não pode ser exibido, que limita sua utilidade.
Como corrigir violações
Para corrigir uma violação desta regra, adicione um acessador get da propriedade. Como alternativa, se o comportamento de uma propriedade somente gravação for necessário, considere a possibilidade de converter essa propriedade para um método.
Quando suprimir avisos
É altamente recomendável que você não suprime um aviso da regra.
Exemplo
No exemplo a seguir, BadClassWithWriteOnlyProperty é um tipo com uma propriedade somente gravação. GoodClassWithReadWritePropertycontém o código corrigido.
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;
}
}
}
}