When we define a property like
public string Name {get; set;}
dot net can make our properties code. but when we use
public string Name {get;} public string Name {set;}
we face with
'Hajloo.SomeThing.PropertyName.set' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors.
Actually why the compiler can't determine the property and make code automatically? What's the problem?
Auto-implemented properties declare a private instance backing field, and interfaces may not declare instance fields. Declaring a property in an interface without defining a body declares a property with accessors that must be implemented by each type that implements that interface.
A get property accessor is used to return the property value, and a set property accessor is used to assign a new value. In C# 9 and later, an init property accessor is used to assign a new value only during object construction. These accessors can have different access levels.
Auto-implemented properties enable you to quickly specify a property of a class without having to write code to Get and Set the property.
Auto-implemented properties are not guaranteed to keep the same backing field name between builds. Therefore, it is theoretically possible that serializing an object in one version of an assembly, and then re-serializing that same object in another assembly could cause breaking changes.
Because the auto-implemented properties generate their own backing store for the property values. You have no access to the internal store.
Implementing a property with
for a normal property
private int _data; public int Data{ get { return _data } };
Here the parent class can do the following somewhere else in the class ( which it can't with auto props)
_data = 100;
Note: You can define an auto-prop like this (which is how I use it the most).
public int Data { get; private set;}
This means that the property can't be set by external clients of the class. However the containing class itself can set the property multiple times via this.Data = x;
within the class definition.
If there is no setter, the property can never have anything other than the default value, so doesn't serve any purpose.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With