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


CA1051: не объявляйте видимые поля экземпляров

TypeName

DoNotDeclareVisibleInstanceFields

CheckId

CA1051

Категория

Microsoft.Design

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

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

Причина

В типе, видимом снаружи, есть видимое снаружи поле экземпляра.

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

Поля главным образом следует использовать для данных реализации.Поля должны быть помечены как private или internal и должны раскрываться с помощью свойств.Доступ к свойству так же прост, как и доступ к полю, а код в методах доступа к свойству может измениться по мере расширения компонентов типа без критических изменений.Свойства, возвращающие только значение закрытого или внутреннего поля, оптимизированы для выполнения наряду с доступом к полю; использование внешне видимых полей вместо свойств дает минимальный прироста производительности.

Внешняя видимость относится к уровням доступности public, protected и protected internal (Public, Protected и Protected Friend в Visual Basic).

Устранение нарушений

Для устранения нарушения этого правила сделайте поле private или internal и раскройте его с помощью свойства внешней видимости.

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

Для этого правила отключать вывод предупреждений не следует.Внешне видимые поля не предлагают каких-либо преимуществ, которых нет в свойствах.Кроме того, открытые поля не могут быть защищены Требования связывания.См. раздел CA2112: защищенные типы не должны предоставлять поля.

Пример

В следующем примере показан тип (BadPublicInstanceFields), который нарушает данное правило.GoodPublicInstanceFields показывает исправленный код.

using System;

namespace DesignLibrary
{
   public class BadPublicInstanceFields
   {
      // Violates rule DoNotDeclareVisibleInstanceFields. 
      public int instanceData = 32;
   }

   public class GoodPublicInstanceFields
   {
      private int instanceData = 32;

      public int InstanceData
      {
         get { return instanceData; }
         set { instanceData = value ; }
      }
   }
}

Связанные правила

CA2112: защищенные типы не должны предоставлять поля

См. также

Основные понятия

Требования связывания