org.sonar.plugins.csharp.S2933.html Maven / Gradle / Ivy
Why is this an issue?
readonly
fields can only be assigned in a class constructor. If a class has a field that’s not marked readonly
but is
only set in the constructor, it could cause confusion about the field’s intended use. To avoid confusion, such fields should be marked
readonly
to make their intended use explicit, and to prevent future maintainers from inadvertently changing their use.
Exceptions
- Fields declared in classes marked with the
Serializable
attribute.
- Fields declared in
partial
classes.
- Fields with attributes are ignored.
- Fields of type
struct
that are not primitive or pointer types are also ignored because of possible unwanted behavior.
How to fix it
Mark the given field with the readonly
modifier.
Code examples
Noncompliant code example
public class Person
{
private int _birthYear; // Noncompliant
Person(int birthYear)
{
_birthYear = birthYear;
}
}
Compliant solution
public class Person
{
private readonly int _birthYear;
Person(int birthYear)
{
_birthYear = birthYear;
}
}
Resources
Documentation
- Microsoft Learn - readonly
- Fabulous adventures in coding - Mutating readonly structs