Partilhar via


CA1044: as propriedades não devem ser somente leitura

TypeName

PropertiesShouldNotBeWriteOnly

CheckId

CA1044

Categoria

Microsoft.Design

Alteração Significativa

Quebra

Causa

O utilitário ou a propriedade protegida têm um acessador set mas não têm um acessador obtidos.

Descrição da Regra

Obter acessadores fornecem acesso de leitura a uma propriedade e os acessadores ajustados fornecem acesso de gravação.Embora seja aceitável e geralmente necessário ter uma propriedade somente leitura, as diretrizes de design proíbem o uso de propriedades somente gravação.Isso é porque permitindo que um usuário defina um valor e depois impedir que o usuário exibe 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, o que limita sua utilidade.

Como Corrigir Violações

Para corrigir uma violação desta regra, adicione um acessador obter à propriedade.Como alternativa, se o comportamento de uma propriedade somente leitura é necessário, considere converta essa propriedade para um método.

Quando Suprimir Alertas

É altamente recomendável que você não suprime um aviso desta regra.

Exemplo

No exemplo a seguir, BadClassWithWriteOnlyProperty é um tipo com uma propriedade somente leitura.GoodClassWithReadWriteProperty conté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; 
         } 
      }
   }
}