get
关键字
get
关键字在属性或索引器中定义访问器方法,它将返回属性值或索引器元素。 有关详细信息,请参阅 “属性”[自动实现的属性](../../programming-guide/classes-and-structs/automatically implemented-properties.md), 和 索引器。
对于属性 get
和 set
访问器除了在专用后盾字段中设置或检索值以外的其他操作,可以利用 C# 编译器对自动实现的属性的支持。 以下示例实现 Hours
为自动实现的属性。
class TimePeriod3
{
public double Hours { get; set; }
}
重要
接口属性声明或部分属性的实现声明不允许自动实现的属性。 编译器将匹配自动实现的属性的语法解释为声明声明,而不是实现声明。
通常,get
访问器包含返回一个值的单个语句,如前面的示例所示。 可以将 get
访问器作为表达式主体成员实现。 以下示例将 get
和 set
访问器都作为 expression-bodied 成员实现。
class TimePeriod2
{
private double _seconds;
public double Seconds
{
get => _seconds;
set => _seconds = value;
}
}
你可能会发现需要实现其中一个访问器主体。 可以使用字段支持的属性让编译器在手动编写另一个访问器时生成一个访问器。 使用 field
C# 13 中作为预览功能添加的关键字访问编译器合成后盾字段:
class TimePeriod4
{
public double Hours {
get;
set => field = (value >= 0)
? value
: throw new ArgumentOutOfRangeException(nameof(value), "The value must not be negative");
}
}
重要
关键字 field
是 C# 13 中的预览功能。 必须使用 .NET 9 并将元素preview
设置为<LangVersion>
项目文件中,才能使用field
上下文关键字。
应注意在 field
具有名为 field
字段的类中使用关键字功能。 新 field
关键字将隐藏属性访问器范围中命名 field
的字段。 可以更改变量的名称 field
,或使用 @
令牌将标识符引用 field
为 @field
。 可以通过阅读关键字的功能规范field
来了解详细信息。
下面的示例为名为 Seconds
的属性同时定义 get
和 set
访问器。 它使用名为 _seconds
的私有字段备份属性值。
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# 语言规范
有关详细信息,请参阅 C# 语言规范。 该语言规范是 C# 语法和用法的权威资料。