set 关键字 (C# 参考)

set 关键字在属性或索引器中定义访问器,它会向属性或索引器元素分配值。 有关详细信息和示例,请参阅 “属性”、“ 自动实现的属性”和 “索引器”。

get对于属性和set访问器除了在专用后盾字段中设置或检索值以外的其他任何操作,可以使用自动实现的属性。 以下示例实现 Hours 为自动实现的属性。

class TimePeriod3
{
    public double Hours { get; set; }
}

重要

接口属性声明或部分属性的实现声明不允许自动实现的属性。 编译器将匹配自动实现的属性的语法解释为声明声明,而不是实现声明。

你可能会发现需要实现其中一个访问器主体。 在 field C# 13 中添加为预览功能的关键字声明字段支持的属性。 可以使用字段支持的属性让编译器在手动编写另一个访问器时生成一个访问器。 使用 field 关键字访问编译器合成后盾字段:

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来了解详细信息。

通常,set 访问器包含分配一个值的单个语句,如前面的示例所示。 可以将 set 访问器作为表达式主体成员实现。 下面的示例将 getset 访问器都作为表达式主体成员实现。

class TimePeriod2
{
    private double _seconds;

    public double Seconds
    {
        get => _seconds;
        set => _seconds = value;
    }
}

下面的示例为名为 Seconds 的属性同时定义 getset 访问器。 它使用名为 _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# 语法和用法的权威资料。

另请参阅