Public fields in public classes do not respect the encapsulation principle and has three main disadvantages:
By using private fields and public properties (set and get), unauthorized modifications are prevented. Properties also benefit from additional protection (security) features such as Link Demands.
Note that due to optimizations on simple properties, public fields provide only very little performance gain.
public class Foo
{
public int instanceData = 32; // Noncompliant
}
public class Foo
{
private int instanceData = 32;
public int InstanceData
{
get { return instanceData; }
set { instanceData = value ; }
}
}
Fields marked as readonly or const are ignored by this rule.
Fields inside classes or structs annotated with the StructLayoutAttribute are ignored by this rule.