与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
字段,但您正在错误地使用两者:
-
你的字段应该是
private
修饰符而不是static
,否则使用它是没有意义的,因为它可能是从外部源改变的。 -
他们都有相同的名字,改变它。
像那样:
private int _intId; public int IntId { get { return _intId; } set { _intId = value; } }