您是否需要在获得/设置逻辑后立即创建私有支持变量?
本文关键字:创建 变量 支持 是否 设置 | 更新日期: 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,而不是两个都需要,你需要自己声明它。