A ``++static++`` field that is neither constant nor read-only is not thread-safe. Correctly accessing these fields from different threads needs synchronization with ``++lock++``s. Improper synchronization may lead to unexpected results, thus publicly visible static fields are best suited for storing non-changing data shared by many consumers. To enforce this intent, these fields should be marked ``++readonly++`` or converted to constants.


== Noncompliant Code Example

----
public class Math
{
  public static double Pi = 3.14;  // Noncompliant
} 
----
or

----
public class Shape
{
  public static Shape Empty = new EmptyShape();  // Noncompliant

  private class EmptyShape : Shape
  {
  } 
} 
----


== Compliant Solution

----
public class Math
{
  public const double Pi = 3.14;
} 
----
or

----
public class Shape
{
  public static readonly Shape Empty = new EmptyShape(); 

  private class EmptyShape : Shape
  {
  } 
} 
----


ifdef::env-github,rspecator-view[]
'''
== Comments And Links
(visible only on this page)

include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]
