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: защищенные типы не должны предоставлять поля