I do not understand the difference between static properties:
public static int intId;
and get;set; properties:
public int intId
{
get
{
return intId;
}
set
{
intId = value;
}
}
What is the difference between these two? They work like same or different?
Your first code example is a field and your second one is a property.
A field is a
class
member that its value is assigned on aclass
instantiating (if it's set onclass
definition), before theconstructor
is been called and you don't have any control when setting or getting it:A property is a
class
member, I can describe it as a special "field" which you can control on how the data will be set and get on it,in other words - Encapsulation, it's kind of a function but behaves like a field:In your example, the
int
property is using thestatic
int
field but you're doing a wrong use of the both:Your field should be with a
private
modifier and notstatic
, otherwise it's not make sense of using it because it might be change from external sources.They both have the same name, change it.
Like that:
Your first sample is a field, not a property.
It's a good practice to always make fields private, and wrap them in properties instead.
That way you can add validation on set or override property in descendants(if it is marked as virtual). Also you can add some tricky code in get and set that will be hidden from those who use your class.
The first is not a property. It is a field. It is also a static one.
Even if it were not static, but an instance variable, the two are different and compile to different IL.
In regards to why use simple properties over a public field - properties allow you to encapsulate the implementation behind. They let you change the type internals without changing the interface.
They are the same int variable for the class however the first one since its a static int, it would be accessed from the Class and can be altered and any instance of it would have the same value.
The second one will just be accessed by instances and its an unique value per instance since its not static, but it can be accessed by anyone since its public.
The first is static field; it's not even a property.
Static fields have only one value for the application.
While the second is an instance property, which is different for every instance of the class.
It does not make a big difference in this example, if it is a property or field. But in the long term, if you use a property in your interface, you might change it later to have an actual getter and setter that do for example, validations or make the object react somehow on the new value. A field is just a field, you cannot control when and how it is set and react to it.