ReSharper 2016.1 Help

Code Inspection: Auto-property can be made get-only (non-private accessibility)

This is a solution-wide code inspection. It only works when the solution-wide analysis is enabled.

Starting from C# 6.0, you can define get-only auto-properties, which (similarly to readonly fields) can be only initialized via a constructor or an initializer. If ReSharper detects an auto-property, which only has read usages and is initialized via constructor/initializer, it suggests to make the property get-only.

In the example below, an immutable class is intended, and once the value for the Name property is checked for nullability in the constructor, it can be safely used without further null checks. However, the private setter does not guarantee that the property will not be changed later in private members. Therefore, it is a good idea to make this property get-only to prevent any modifications.

public class Person { public string Name { get; set; } // Auto-property can be made get-only public Person(string name) { if (name == null) throw new ArgumentNullException(nameof(name)); Name = name; } public override string ToString() { return $"NAME: {Name.ToUpper()}"; } }

See Also

Last modified: 19 August 2016