Difference between Properties with get; set; and without get; set;
我不理解静态特性之间的区别:
1 | public static int intId; |
和获取;设置;属性:
1 2 3 4 5 6 7 8 9 10 11 | public int intId { get { return intId; } set { intId = value; } } |
这两者有什么区别?他们的工作方式相同还是不同?
第一个示例是字段,而不是属性。
最好的做法是始终将字段设为私有字段,并将它们包装在属性中。
这样,您就可以在子体中的set或override属性上添加验证(如果该属性标记为virtual)。此外,您还可以在get和set中添加一些复杂的代码,这些代码将对使用类的人隐藏。
第一个不是属性。这是一个领域。它也是静态的。
即使它不是静态的,而是一个实例变量,这两个变量也是不同的,编译成不同的IL。
关于为什么在公共字段上使用简单属性,属性允许您封装后面的实现。它们允许您在不更改接口的情况下更改类型内部。
它们是类的同一个int变量,但是第一个变量是静态int,它将从类中访问,并且可以更改,它的任何实例都将具有相同的值。
1 | public static int intId; |
第二个实例只会被实例访问,每个实例都有一个唯一的值,因为它不是静态的,但是自公开之后,任何人都可以访问它。
40
第一个代码示例是字段,第二个代码示例是属性。
字段是一个
1 | public static int intId; |
属性是
1 2 3 4 5 6 7 8 9 10 11 | public int intId { get { return intId; } set { intId = value; } } |
在您的示例中,
您的字段应该有一个
他们都有相同的名字,改变它。
像这样:
2第一个是静态字段,它甚至不是一个属性。
静态字段对于应用程序只有一个值。
而第二个是实例属性,这对于类的每个实例都是不同的。
在这个例子中,如果它是一个属性或字段,它不会有很大的区别。但从长远来看,如果在接口中使用属性,稍后可能会将其更改为具有实际的getter和setter,例如,验证或使对象对新值做出某种反应。字段只是一个字段,您不能控制它的设置时间和设置方式并对其做出反应。