¿Hay alguna manera de evitar el uso del constructor predeterminado?Impedir el uso del constructor predeterminado
Todo lo que puedo pensar es lanzar una excepción, pero me gustaría algo que provoque un error de tiempo de compilación.
¿Hay alguna manera de evitar el uso del constructor predeterminado?Impedir el uso del constructor predeterminado
Todo lo que puedo pensar es lanzar una excepción, pero me gustaría algo que provoque un error de tiempo de compilación.
I piensa que debe cubrir todas las bases ...
Dijiste casi exactamente lo que estaba escribiendo :) – Joel
Desearía saber sobre clases estáticas hace mucho tiempo. – luiscubal
a menos que sea una estructura y no una clase. Si este es el caso, se genera el ctor predeterminado (algo bueno para que todos los accesorios se inicialicen) pero invocable (desafortunadamente) - es decir, quiero forzar al usuario a usar el ctor con params. –
Hazlo privado.
Así,
class SomeClass
{
private SomeClass()
{
}
public SomeClass(int SomeParam)
{
}
}
+1 para ir al grano. – corsiKa
A menos que lo necesite dentro del tipo (o tipos anidados) puede eliminarlo por completo aquí; solo se generará si no se declaran explícitamente constructores. –
@Jon Normalmente soy un tipo de cinturón y tirantes, así que normalmente lo haría de esta manera; de esa manera lo que intento hacer es claro para cualquiera que lo mire. Es bueno saber que el compilador lo maneja automáticamente, sin embargo, si lo olvido. –
Usted sólo puede hacerlo privado:
private MyClass()
{
}
alternativa (si usted no lo sabía ya) si sólo se declara un constructor con parámetros, la opción por defecto ISN No agregado por el compilador, por ej.
private MyClass(string myParameter)
{
//Can't call new MyClass() anymore
}
Una cosa para mencionar que otros no tienen. El constructor predeterminado aún debería poder configurar los bits de implementación predeterminados para evitar la reutilización. Esto no es un problema si es privado, ya que aún puede encadenarse a un constructor privado. Simplemente lo haces no disponible para fuentes externas.
private MyClass()
{
}
public MyClass(string something) : this()
{
}
Eso resuelve el problema. Sin embargo, tenga en cuenta que la protección puede ser una implementación preferida si la clase no está sellada.
Aparte de otras respuestas, se puede leer el texto siguiente , para más información sobre Singleton patrón, y algunos ejemplos. El patrón Singleton se basa en que el constructor es privado.
es posible que encuentre problemas si se hace esto: (./Serialización/etc unión) en .NET un constructor sin parámetros por defecto es necesaria para una serie de cosas. Considere tener valores predeterminados para cualquier valor que necesite establecer a través de parámetros de constructor. Esto puede no importar en su caso, pero vale la pena mencionarlo. –