+6  A: 

If you want to be able to do anything other than create a new object just from the code in the constructor, don't use a constructor in the first place.

Do you really need an Instance constructor taking an int? Why not turn it into a static factory method:

public static Instance CreateInstance(int id)
{
    MyTemplate def = new MyTemplate();
    return def.GetInstance(id);
}

Static methods have various advantages over constructors - although some disadvantages too. (There's a separate SO question on that - worth a look.)

Jon Skeet
+2  A: 

You cannot recreate 'this' from either the constructor or any other method. You can create another object and copy contents, but I would instead make the factory public. Define a factory class that has three createDocument() methods, one for a blank document, one for a document from the DB and a third one from a template:

public class Factory {
   public static Document createBlankDocument();
   public static Document createDocument( DocumentId id );
   public static Document createDocumentFromTemplate( TemplateId id );
}
David Rodríguez - dribeas
A: 

I'm with Jon, it is much better to use factory methods as this is crystal clear to the developer about what is happening (something more than just creating a new object).

A factory method says to the programmer, "there's some special initialisation happening here, where using new will not be good enough".

Typically you will use factories when you want to recycle or cache resources, and as a converse you do not expect a recycled or cached resource when you use the new keyword; you expect a brand new resource (it's baked right into the keyword) :)

DoctaJonez