只是想确定。
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,是否由于某些原因而写入?
答案 0 :(得分:2)
你不要让它private
只返回它的值。 private
是access 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#属性与此方案完美匹配。
希望这会有所帮助!!