Constructors can be chained together, to avoid having to duplicate code, so it's quite common to have private constructors that nobody is supposed to call outside of the class, but that each public constructor then just chains to.
Example:
public class Test
{
private Test(int? a,string b) { }
public Test(int a) : this(a, null) { }
public Test(string b) : this(null, b) { }
}
Here there is two public constructors, one taking a string, and one taking an int, and they both chain to the common private constructor that takes both arguments.
Also, of course, you can constructs new objects from within the same class by using the private constructor, for instance you might want specialized constructors only available through static factory methods:
public static Test Create()
{
int? a = ReadConfigurationForA();
string b = ReadConfigurationForB();
return new Test(a, b);
}
Here it might not be a good idea to expose the private constructor to the outside world, but instead add a static factory method that fetches the correct arguments to pass on the constructor.