EDIT: Has actualizado tu pregunta, quieres construir una clase sin un constructor. O llame a un "Constructor vacío" predeterminado.
Esto no se puede hacer, ya que el compilador no generará un constructor predeterminado si ya hay uno especificado. Sin embargo, para el beneficio de los lectores, aquí es cómo llegar a un constructor interno, protegido o privado:
Asumiendo que su clase se llama Foo:
using System.Reflection;
// If the constructor takes arguments, otherwise pass these as null
Type[] pTypes = new Type[1];
pTypes[0] = typeof(object);
object[] argList = new object[1];
argList[0] = constructorArgs;
ConstructorInfo c = typeof(Foo).GetConstructor
(BindingFlags.NonPublic |
BindingFlags.Instance,
null,
pTypes,
null);
Foo foo =
(Foo) c.Invoke(BindingFlags.NonPublic,
null,
argList,
Application.CurrentCulture);
feo, pero funciona.
Por supuesto, puede haber una razón perfectamente legítima para marcar un constructor como interno, por lo que realmente debería considerar la logística de lo que desea antes de abusar de esa clase al obtenerla con reflexión.
Nota relacionada con esto y algunas personas tienden a no darse cuenta es que si lanza una excepción durante la construcción, su objeto aún existe ... si tiene un finalizador, que aún se ejecutará, debe tener cuidado al no hacer suposiciones sobre lo que sucedió en el constructor. – meandmycode
¿Por qué querrías esto alguna vez? Si solo es curiosidad, está bien. – nawfal
@nawfal WCF usa esto para su motor de serialización, que es una de las razones por las que es útil en general. Mi caso específico era realmente jugar con un modelo de objetos existente (el OM de SharePoint) para ver si era posible solucionar algunos errores/limitaciones con fines experimentales. Muy hacky seguro, pero de nuevo, experimental. –