一旦获得/设置逻辑,是否需要创建私有后备变量?

时间:2014-03-11 18:54:46

标签: c# properties c#-3.0

如果您在C#,AFIK中创建属性,如果您只是使用get / set,则不需要私有后备变量,利用C#3.0自动实现的属性:

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

但是,让我们假设您想在Age属性中添加一些逻辑,并让它接受仅大于18的值。此时,是否有必要创建一个私有变量?有办法吗?

5 个答案:

答案 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,而不是两者都需要,则需要自己声明。