polimorfico - herencia c#
Constructor vacĂo o sin constructor (8)
Creo que no es obligatorio tener un constructor predeterminado en una clase (C #).
Entonces, en esa situación, ¿tendré un constructor vacío en la clase o puedo omitirlo?
¿Es una buena práctica tener un constructor predeterminado vacío?
Class test
{
public test()
{
}
......
}
o
Class test
{
......
}
El compilador de C # creará el constructor predeterminado para usted, por lo que no debe escribir uno sin parámetros, con un cuerpo vacío.
Las únicas veces que incluiría un constructor sin parámetros vacío es si quiero que el constructor sea privado o si quiero que un constructor sin parámetros llame a otra sobrecarga con nulo como parámetro. Por cierto, en su ejemplo anterior ha hecho privado el constructor de Test al no especificar public.
class Foo
{
public Foo()
: this(null)
{
}
public Foo(string bar)
{
if (bar != null)
{
Console.WriteLine(bar);
}
}
}
No escriba un constructor vacío que se crearía de forma predeterminada
Por defecto C # agregará un constructor de parámetro cero para usted. Así que no agregue uno si no tiene algo especial que hacer allí.
Tendrá que agregar cualquier constructor vacío usted mismo, incluso sin código, si tiene otro constructor con parámetros y quiere mantener vivo el constructor sin parámetros.
Otro escenario en el que desearía agregar un constructor sin parámetros vacío es si desea cambiar su modificador de acceso de público a otra cosa (privado, protegido o interno)
Si la clase no será utilizada por terceros y no necesita un constructor sobrecargado, no escriba un constructor vacío.
Pero...
Imagine que ya ha enviado el producto, y los terceros utilizan su clase. Unos meses más tarde hay un nuevo requisito que te hace agregar un constructor con un argumento.
Ahora, al hacerlo, el compilador de C # ya no genera un constructor predeterminado. Si no agrega un constructor vacío explícitamente, el código de terceros se romperá.
En mi opinión, siempre debe definir constructores vacíos (un trazador de líneas) para las clases públicas utilizadas por terceros.
Si no necesita un constructor sin parámetros, no agregue uno con un cuerpo vacío. Sin embargo, si alguien quiere serializar / deserializar objetos de su clase, necesitará un constructor sin parámetros.
Si no define constructores, el compilador generará automáticamente uno sin parámetros predeterminado para usted, pero no lo hará si define usted mismo un constructor.
Por cierto, puede suprimir el constructor predeterminado generado automáticamente del compilador de C # definiendo un constructor privado vacío.
KISS : si su clase no necesita hacer nada en el constructor predeterminado, no la defina. El compilador generará uno para ti.
De la boca del caballo :
A menos que la clase sea estática, las clases sin constructores reciben un constructor predeterminado público por el compilador C # para habilitar la creación de instancias de clase.
There''s nothing like default constructors
. Es un constructor público sin parámetros en C #. El compilador de C # buscará constructores en una clase mientras compila y agregará un constructor público sin parámetros si no se definen constructores. Así que está bien omitir la definición de un constructor si los objetos de su clase no necesitan ninguna operación especial para la construcción.
En segundo lugar, si define un constructor con parámetro, el compilador no agregará un constructor público sin parámetros porque el compilador supondrá que sus objetos deben construirse a través del constructor que ha definido. Una vez dicho esto, debe definir explícitamente un constructor sin parámetros si tiene al menos un constructor parametrizado, si necesita que sus objetos se construyan con constructor de parámetros.
También puedes tener un constructor privado sin parámetros que sea instrumental en la creación de clases singleton.