No. Como alternativa, podría aceptar un lambda como argumento, que también le brinda control total sobre la parte del proceso de "creación" que se llamará. De esta manera se le puede llamar como:
MyClass instance = MyClass.FactoryCreate(c=>
{
c.SomeProperty = something;
c.AnotherProperty = somethingElse;
});
La creación se vería similar a:
public static MyClass FactoryCreate(Action<MyClass> initalizer)
{
MyClass myClass = new MyClass();
//do stuff
initializer(myClass);
//do more stuff
return myClass;
}
Otra opción es volver a un constructor en su lugar (con un operador de conversión implícita a MiClase). Que podríamos llamar como:
MyClass instance = MyClass.FactoryCreate()
.WithSomeProperty(something)
.WithAnotherProperty(somethingElse);
Comprobar this para el constructor
Ambas versiones se comprueban en tiempo de compilación y tienen compatibilidad con IntelliSense completa.
Una tercera opción que requiere un constructor por defecto:
//used like:
var data = MyClass.FactoryCreate(() => new Data
{
Desc = "something",
Id = 1
});
//Implemented as:
public static MyClass FactoryCreate(Expression<Func<MyClass>> initializer)
{
var myclass = new MyClass();
ApplyInitializer(myclass, (MemberInitExpression)initializer.Body);
return myclass ;
}
//using this:
static void ApplyInitializer(object instance, MemberInitExpression initalizer)
{
foreach (var bind in initalizer.Bindings.Cast<MemberAssignment>())
{
var prop = (PropertyInfo)bind.Member;
var value = ((ConstantExpression)bind.Expression).Value;
prop.SetValue(instance, value, null);
}
}
Es un medio entre verificado en tiempo de compilación y no comprobadas. Necesita algo de trabajo, ya que está forzando la expresión constante de las asignaciones. Creo que cualquier otra cosa son variaciones de los enfoques que ya están en las respuestas. Recuerde que también puede usar las asignaciones normales, considere si realmente necesita algo de esto.
Deseado C# agrega un poco de azúcar para la estática "Crear" métodos como éste (como lo hicieron, por ejemplo, en "Añadir" para las colecciones) :) – nawfal