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?
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
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).
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.
A more modern scenario for receiving this error is building code that uses C#6 syntax using a version of VisualStudio that is less than VS 2015 (or using MsBuild that is less than 14).
In C#6.0 it is allowable to have autoProperties that do not have a setter (they are assumed to be a private set).
Try compiling with VS2015+ or msbuild 14+ .. or modify the code so that all autoProperties have a setter.