The set keyword (C# Reference)
The set
keyword defines an accessor method in a property or indexer that assigns a value to the property or the indexer element. For more information and examples, see Properties, Automatically implemented properties, and Indexers.
For simple cases in which a property's get
and set
accessors perform no other operation than setting or retrieving a value in a private backing field, you can use automatically implemented properties. The following example implements Hours
as an automatically implemented property.
class TimePeriod3
{
public double Hours { get; set; }
}
Important
Automatically implemented properties aren't allowed for interface property declarations or the implementing declaration for a partial property. The compiler interprets syntax matching an automatically implemented property as the declaring declaration, not an implementing declaration.
You might find that you need to implement one of the accessor bodies. The field
keyword, added as a preview feature in C# 13 declares a field backed property. You can use a field backed property to let the compiler generate one accessor while you write the other by hand. You use the field
keyword to access the compiler synthesized backing field:
class TimePeriod4
{
public double Hours {
get;
set => field = (value >= 0)
? value
: throw new ArgumentOutOfRangeException(nameof(value), "The value must not be negative");
}
}
Important
The field
keyword is a preview feature in C# 13. You must be using .NET 9 and set your <LangVersion>
element to preview
in your project file in order to use the field
contextual keyword.
You should be careful using the field
keyword feature in a class that has a field named field
. The new field
keyword shadows a field named field
in the scope of a property accessor. You can either change the name of the field
variable, or use the @
token to reference the field
identifier as @field
. You can learn more by reading the feature specification for the field
keyword.
Often, the set
accessor consists of a single statement that assigns a value, as it did in the previous example. You can implement the set
accessor as an expression-bodied member. The following example implements both the get
and the set
accessors as expression-bodied members.
class TimePeriod2
{
private double _seconds;
public double Seconds
{
get => _seconds;
set => _seconds = value;
}
}
The following example defines both a get
and a set
accessor for a property named Seconds
. It uses a private field named _seconds
to back the property value.
class TimePeriod
{
private double _seconds;
public double Seconds
{
get { return _seconds; }
set
{
if (value < 0)
{
throw new ArgumentOutOfRangeException(nameof(value), "The value of the time period must be non-negative.");
}
_seconds = value;
}
}
}
C# language specification
For more information, see the C# Language Specification. The language specification is the definitive source for C# syntax and usage.