C#质疑私有变量

时间:2015-04-22 05:07:59

标签: c# variables private

只是想确定。

    public class Product
    {
        private decimal unitPrice;

        public int Id { get; set; }
        public string Code { get; set; }
        public string Name { get; set; }

        //private string code;

        public decimal Unitprice
        {
            get 
            { 
                return unitPrice; 
            }
            set 
            { 
              if (value >=0)
                  unitPrice = value;
            }
        }
    }

为什么我们必须让privatePrice的私有变量将值返回UnitPrice,是否由于某些原因而写入?

4 个答案:

答案 0 :(得分:2)

你不要让它private只返回它的值。 privateaccess modifier之一。它们用于限制代码中特定变量的访问/使用范围。

private这意味着unitPrice目前可以访问,或者只能由此特定类使用。没有其他外部程序集可以使用此变量。

如果您想访问其他区域以外的变量,可以选择将其设为public

希望这可以解决它。

答案 1 :(得分:1)

从设计角度来看,单位价格属性与其他属性完全相同,但因为它存在约束。

 if (value >=0)

只有正价才有效,除了预见房产所在的私人变量之外别无选择。

在早期版本的.NET中,我们无法做到这样的事情:

public int Id { get; set; }

并且必须一直写出来。上面的符号更方便,它也使代码更清晰。它曾经是这样的:

private int _id;

public int Id{
     get{ return _id;}
     set{ _id = value;}
}

答案 2 :(得分:0)

公共属性UnitPrice公开给其他要读取或修改的类。但作为一个属性允许您的类对值进行一定程度的控制 - 例如,您可以验证任何更改。此外,在内部,您可以完全更改获取和修改值的方式,而无需更改类的合同。换句话说,您可以在不影响任何消费者的情况下进行此类更改。

支持字段unitPrice纯粹是一个实现细节,它是由类封装的内部状态。公开此字段意味着您将失去修改值的派生的所有机会,并且您没有用于验证值更改的入口点。属性最初可能看起来毫无意义,但它们有助于使代码更易于维护,因为更改可以更容易地限制在单个类中。

get和set块纯粹是语法糖,在编译器中创建了两个名为get_UnitPrice()和set_UnitPrice(x)的方法,用于对属性进行读/写操作。您可以使用类似的方法,但属性更具可读性,并且设计为与类状态交互的低成本方式,方法用于提供行为。

答案 3 :(得分:0)

是的,当您想要对变量进行一些控制时,获取和设置属性非常有用。请考虑以下情况。

如果您将变量指定为私有,则您希望没有人能够访问您的变量。

但是,如果您希望其他人能够访问您的私人变量,但您不希望其他人更改它。在这种情况下,您可以使用属性

public class Product
{
 private decimal price;
 public decimal Price{get{ return price;}}
}

现在其他人可以获得价格,但他们无法改变它

在您的情况下,您允许其他人同时获取和设置您的单位价格,这相当于给予unitprice公共访问权限。但是,您允许在一个条件下将unitprice设置为0.因此,C#属性与此方案完美匹配。

希望这会有所帮助!!