如果您在C#,AFIK中创建属性,如果您只是使用get / set,则不需要私有后备变量,利用C#3.0自动实现的属性:
...
public int Age {get;set;}
但是,让我们假设您想在Age属性中添加一些逻辑,并让它接受仅大于18的值。此时,是否有必要创建一个私有变量?有办法吗?
答案 0 :(得分:5)
然而,让我们说你想在Age中加入一些逻辑 属性并让它接受仅大于18的值。此时 点,是否有必要创建一个私有变量?
是。您将需要一个支持领域。
如果您只是使用get / set,,那么您不需要私有后备变量
对于自动实现的属性,编译器将添加支持字段。
请参阅:Auto-Implemented Properties (C# Programming Guide)
在C#3.0及更高版本中,自动实现的属性生成 当不需要额外的逻辑时,属性声明更简洁 在物业访问者。它们还使客户端代码能够创建 对象。声明属性时,如下所示 例如,编译器会创建一个私有的匿名支持字段 只能通过属性的获取和设置访问 访问器。
您的财产看起来像:
private int _age;
public int Age
{
get { return _age; }
set
{
if (_age > 18)
_age = value;
else
{
//throw exception, Show message etc
}
}
}
答案 1 :(得分:2)
此时,是否需要创建私有变量?
好吧,你必须将它存储在某个地方 - 通常私有支持变量最容易。
你可以使用验证属性,但这些属性在UI层强制执行 - 它不会向普遍使用的setter添加任何“特殊”逻辑。
顺便说一下,无论如何,编译器会在幕后为幕后创建支持变量,因此它不会改变低级行为。
答案 2 :(得分:2)
是的,这是必要的。不,没有办法解决它。
答案 3 :(得分:2)
有办法吗?
不,没有办法绕过它:如果你的代码需要在变量中存储属性的状态,并且你需要在该变量周围有一些逻辑,你需要手动添加该变量。
只有两种情况,您不需要属性的支持变量:
答案 4 :(得分:1)
是的,您需要声明自己的私人支持字段。
为了清楚起见,当您使用自动实现的属性时,仍然 是一个私有支持字段,除了它是由编译器生成的。
如果您想要向属性添加逻辑,或者您只需要getter或setter,而不是两者都需要,则需要自己声明。