Поделиться через


Свойства не должны быть доступны только для записи

Обновлен: Ноябрь 2007

TypeName

PropertiesShouldNotBeWriteOnly

CheckId

CA1044

Категория

Microsoft.Design

Критическое изменение

Критическое изменение

Причина

Открытое или защищенное свойство имеет метод доступа set, но не имеет метода доступа get.

Описание правила

Методы доступа get предоставляют доступ на чтение свойства, а методы доступа set — на запись свойства. Вполне допустимо и зачастую необходимо использовать свойства, доступные только для чтения, но запрещается использовать свойства, доступные только для записи, поскольку небезопасно сначала давать пользователю возможность установить какое-либо значение, а затем запретить пользователю просмотр этого значения. Кроме того, при отсутствии доступа на чтение нельзя просмотреть состояние общих объектов, что снижает их полезность.

Предотвращение нарушений

Чтобы устранить нарушение этого правило, добавьте для свойства метод доступа get. Кроме того, если все же требуется свойство, доступное только для записи, можно преобразовать это свойство в метод.

Отключение предупреждений

Настоятельно рекомендуется не отключать предупреждение этого правила.

Пример

В следующем примере BadClassWithWriteOnlyProperty — тип со свойством, доступным только для чтения. GoodClassWithReadWriteProperty содержит исправленный код.

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; 
         } 
      }
   }
}