C# 什么';私有var、getter和setter相对于公共var的好处是什么?
可能重复:C# 什么';私有var、getter和setter相对于公共var的好处是什么?,c#,C#,可能重复: 我在代码示例中看到了这一点 private List<Car> cars; public List<Car> Cars { get { return this.cars; } set { this.cars = value; } } 私家车列表; 公共车辆清单 { 获取{返回此.cars;} 设置{this.cars=value;} } 这样做的好处是什么 public List<Car> cars;
我在代码示例中看到了这一点
private List<Car> cars;
public List<Car> Cars
{
get { return this.cars; }
set { this.cars = value; }
}
私家车列表;
公共车辆清单
{
获取{返回此.cars;}
设置{this.cars=value;}
}
这样做的好处是什么
public List<Car> cars;
公共列表车辆;
?
谢谢。这是一个属性,该属性允许您在设置或获取值时控制设置/获取操作并执行其他任务
例如,您可以在get中检查cars列表是否为null,如果为null,您可以创建一个新列表并分配给cars,然后返回cars。这里有几个显著的区别
- 几个序列化API只考虑属性
- 不能在字段上设置断点,但可以在属性上设置断点
- 设置属性的版本比设置字段的版本容易
public List Cars{get;set;}
您可以将业务逻辑添加到属性中,但对于上面没有使用逻辑的示例,您可以使用简单的public List Cars{get;set;}这将自动生成支持变量,如果您这样做,那么如果多个线程并行访问,这可能会产生一个很好的竞争条件…@Yahia:这将公开一个字段。是的,绝对。。。我刚才是在评论一个get
…断点很难在自动属性上设置的示例。@AdamHouldsworth是的,但是为了调试,您总是可以临时将自动属性转换为完整属性。对于字段来说,情况并非如此。当然,我只是在评论是否完成。我几乎100%的时间倾向于汽车物业/公共领域的物业。需要注意的是,在非标准情况下(生产/实时代码等)中断自动属性是有问题的。@AdamHouldsworth:在访问字段时(当然是从字段端)不可能设置断点,所以我不确定这是什么区别。@AdamRobinson没有说这是自动属性和字段之间的区别,而是自动属性和属性之间的区别。自动特性和特性有时被错误地视为完全同义,它们不是100%。