Escribo un constructor cuando la creación de la instancia no tiene efectos secundarios, es decir, cuando lo único que el constructor está haciendo es inicializando propiedades. Escribo un método estático (y hago que el constructor sea privado) si la creación de la instancia hace algo que normalmente no esperarías que hiciera un constructor.
Por ejemplo:
public class Foo
{
private Foo() { }
private static List<Foo> FooList = new List<Foo>();
public static Foo CreateFoo()
{
Foo f = new Foo();
FooList.Add(f);
return f;
}
}
Debido a que se adhieran a esta convención, si veo
Foo f = Foo.CreateFoo();
Bar b = new Bar();
al leer el código, tengo un conjunto muy diferente de las expectativas acerca de lo que cada uno de los dos líneas está haciendo. Ese código no me dice qué es lo que hace que crear un Foo sea diferente de crear un Bar, pero me dice que tengo que mirar.
Han agregado "método" al título, ya que de lo contrario sugiere que la elección se realiza entre un constructor de instancias o un constructor estático. (El texto es claro, pero el título provocó una cierta pregunta "¿Huh?" En mi mente :) –
@JonSkeet Tu edición se ha deshecho :) – gcampbell
@gcampbell: Lo volveré a hacer, considerando la pregunta claramente * no es * sobre constructores estáticos ... –