您是否需要在获得/设置逻辑后立即创建私有支持变量?

本文关键字:创建 变量 支持 是否 设置 | 更新日期: 2023-09-27 17:49:38

如果你在c#中创建一个属性,AFIK,你不需要一个私有的支持变量,如果你只是使用get/set,利用c# 3.0自动实现的属性:

...
public int Age {get;set;}

但是,假设您想在Age属性中加入一点逻辑,并让它只接受大于18的值。在这一点上,有必要创建一个私有变量吗?有办法解决这个问题吗?

您是否需要在获得/设置逻辑后立即创建私有支持变量?

但是,假设您想要在Age中添加一点逻辑属性,并让它只接受大于18的值。点,是否有必要创建一个私有变量?

是的。你需要一个后备场地。

你不需要私有的支持变量,如果你只使用get/set,

对于自动实现的属性,编译器将添加支持字段。

参见:自动实现属性(c#编程指南)

在c# 3.0及以后的版本中,自动实现的属性使当不需要附加逻辑时,属性声明更简洁在属性访问器中。它们还支持创建客户端代码对象。如下所示声明属性时例如,编译器创建一个私有的、匿名的支持字段只能通过属性的get和set来访问访问器。

你的属性看起来像:

private int _age;
public int Age
{
    get { return _age; }
    set
    {
        if (_age > 18)
            _age = value;
        else
        {
            //throw exception, Show message etc 
        }
    }
}
此时,是否有必要创建一个私有变量?

好吧,你必须把它存储在的某个地方——通常一个私有的支持变量是最简单的。

可以使用验证属性,但这些是在UI层强制执行的——它不会向通用的setter添加任何"特殊"逻辑。

顺便说一句,编译器在后台为你创建了后台变量,所以它不会改变底层行为。

是的,这是必要的。不,没有办法。

有办法吗?

不,没有办法:如果你的代码需要将属性的状态存储在一个变量中,并且你需要围绕该变量的一些逻辑,你需要手动添加该变量。

只有两种情况不需要属性的备用变量:

  • 你的属性被计算,
  • 你的属性是自动实现的。

是的,您需要声明您自己的私有支持字段。

需要说明的是,当你使用自动实现的属性时,仍然是一个私有的支持字段,除非它是由编译器生成的。

如果你想给属性添加逻辑,或者如果你只需要一个getter或setter,而不是两个都需要,你需要自己声明它。