Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';私有var、getter和setter相对于公共var的好处是什么?_C# - Fatal编程技术网

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只考虑属性
  • 几个序列化API只考虑属性
  • 不能在字段上设置断点,但可以在属性上设置断点
  • 设置属性的版本比设置字段的版本容易

作为旁白,您可以使用:
public List Cars{get;set;}
您可以将业务逻辑添加到属性中,但对于上面没有使用逻辑的示例,您可以使用简单的public List Cars{get;set;}这将自动生成支持变量,如果您这样做,那么如果多个线程并行访问,这可能会产生一个很好的竞争条件…@Yahia:这将公开一个字段。是的,绝对。。。我刚才是在评论一个
get
…断点很难在自动属性上设置的示例。@AdamHouldsworth是的,但是为了调试,您总是可以临时将自动属性转换为完整属性。对于字段来说,情况并非如此。当然,我只是在评论是否完成。我几乎100%的时间倾向于汽车物业/公共领域的物业。需要注意的是,在非标准情况下(生产/实时代码等)中断自动属性是有问题的。@AdamHouldsworth:在访问字段时(当然是从字段端)不可能设置断点,所以我不确定这是什么区别。@AdamRobinson没有说这是自动属性和字段之间的区别,而是自动属性和属性之间的区别。自动特性和特性有时被错误地视为完全同义,它们不是100%。