The auto property came into existence at C# version 3.0. It is used for code simplification and by using this your code becomes more readable One of the great features of c# is you can declare a property. Code: public class Student { public Guid Id { get; }=Guid.NewGuid(); } In this code, you can initialize the property at the time of declaration. By using this feature you don’t have a need to write a constructor and initialize the property in that constructor. In the previous version of c# we not able to write a property only with get. Above image shows it will give an error in c# version 5.0 and below but if you declared read-only property in c# it will not throw an error. Below is the image of version 6.0 Why auto-property initialization needed? Suppose I have a class like below Code: public class Student { public string Fname { get; private set; } } I am writing this code because I want my property read-only and I don’t want to set value from outside. But somehow by mistake, I implement one method and changed the value of that Fname field like below which is completely valid. Code: public class Student { public string Fname { get; private set; } public void ByMistake() { Fname = "sagar"; } } To avoid this in C# 6.0 introduced auto property initialization for read-only field and our code become Code: public class Student { public string Fname { get; } = "Mr."; } By using this our field becomes Immutable. And if try to change in the class itself it gives the compile-time error. Code: public class Student { public string Fname { get; } = "Mr."; public void tryToChange() { Fname = "sagar"; } } Check below code by that you will able to change read-only property value but it is in the constructor. Code: public class Student { public string Fname { get; } = "Mr."; public Student() { Fname = "sagar"; } public void tryToChange() { Fname = "sagar"; } }