与get之间的区别; 组; 没有得到; 组;

我不明白静态属性之间的区别:

public static int intId; 

并得到 特性:

 public int intId { get { return intId; } set { intId = value; } } 

这两者有什么区别? 他们的工作方式相同或不同?

您的第一个样本是字段,而不是属性。

始终将字段设为私有,并将其包装在属性中是一种很好的做法。

这样,您可以在后代中添加set或override属性的validation(如果它被标记为虚拟)。 此外,您可以在get和set中添加一些棘手的代码,这些代码将隐藏在使用您的类的人身上。

第一个不是财产。 这是一个领域。 它也是一个静态的

即使它不是静态的,而是实例变量,两者是不同的,并编译为不同的IL。

关于为什么在公共字段上使用简单属性 – 属性允许您封装实现。 它们允许您在不更改界面的情况下更改类型内部。

它们是类的相同int变量,但是第一个因为它是一个静态int,它将从类访问并且可以被更改,并且它的任何实例都具有相同的值。

 public static int intId; 

第二个只是实例访问它的每个实例的唯一值,因为它不是静态的,但是任何人都可以访问它,因为它是公开的。

  public int intId { get { return intId; } set { intId = value; } } 

第一个是静态场; 它甚至都不属于财产。

静态字段只有一个应用程序值。

而第二个是实例属性,对于类的每个实例都是不同的。

如果它是属性或字段,则在此示例中没有太大区别。 但从长远来看,如果你在界面中使用了一个属性,你可能会在以后更改它以获得一个实际的getter和setter,例如,validation或使对象以某种方式对新值做出反应。 字段只是一个字段,您无法控制何时以及如何设置它并对其作出反应。

这两者有什么区别?

您的第一个代码示例是一个字段,第二个代码示例是一个属性。

字段是一个class成员,它的值在实例化的class上分配(如果它在class定义上设置),在调用constructor之前,并且在设置或获取它时没有任何控制:

 public static int intId; 

属性是一个class成员,我可以将它描述为一个特殊的“字段”,你可以控制它如何设置和获取数据,换句话说 – 封装,它是一种函数,但表现得像一个字段:

 public int intId { get { return intId; } set { intId = value; } } 

在您的示例中, int属性使用static int字段,但您正在错误地使用两者:

  1. 你的字段应该是private修饰符而不是static ,否则使用它是没有意义的,因为它可能是从外部源改变的。

  2. 他们都有相同的名字,改变它。

像那样:

 private int _intId; public int IntId { get { return _intId; } set { _intId = value; } }