I think it’s reasonable to chain constructors together, but I do it the other way – the version with fewer parameters calls the version with more parameters. That way it makes it very clear what’s happening, and all the real “logic” (beyond the default values) is in a single place. For example:
public Foo(int x, int y)
{
this.x = x;
this.y = y;
precomputedValue = x * y;
}
private static int DefaultY
{
get { return DateTime.Now.Minute; }
}
public Foo(int x) : this(x, DefaultY)
{
}
public Foo() : this(1, DefaultY)
{
}
Note that if you have lots of constructor overloads, you may wish to move to static factory methods instead – that usually makes the code clearer, as well as allowing multiple methods to take the same set of parameters, e.g.
public static XmlDocument FromText(string xml)
public static XmlDocument FromFile(string filename)