Expanding on OG's post...
You can also use them to initialize some standard set of fields before other constructors, for example:
public class Sample
{
int x, y, z;
string name;
bool flag;
private Sample()
{
x = 5;
y = 10;
z = 15;
flag = true;
}
public Sample(string Name)
: this()
{
name = Name;
}
public Sample(string Name, bool flag)
: this(Name)
{
this.flag = flag;
}
}
That way, you reduce repetition of code and make sure that there is only one place if you have to change the default values of the fields. Yes you can do this right when you define the variables but there are instances when you can't or want more logic to initializing them.
Then you can only use the public constructor to create the object, like:
Sample s1 = new Sample("BlahBlah");
Sample s2 = new Sample("BlahBlooBlee", false);