internal sealed class MenosRendimiento
{
private int _a = 1;
private string _cadena = "Hola";
private double _n = 5.125;
private byte _b;
public MenosRendimiento() { }
public MenosRendimiento(int a) { }
public MenosRendimiento(string cadena) { }
public MenosRendimiento(int a, string cadena) { }
}
De esta forma estamos incurriendo en un gasto de recursos innecesarios, ya que estaremos inicializando los tres campos de la clase en cada constructor (en este caso 12 veces). _b nos garantiza que se inicializa a cero aunque no lo especifiquemos.
Lo correcto sería declarar los campos de clase sin inicializar, crear un constructor simple que inicialice los campos, y los demás constructores llamarán al constructor de inicialización común, para verlo más claro os pongo como quedaría el código:
internal sealed class MasRendimiento
{
private int _a;
private string _cadena;
private double _n;
private byte _b;
//Este constructor inicializa los campos
//a su valor por defecto.
//todos los demás constructores llamarán
//explícitamente a este constructor
public MasRendimiento()
{
_a = 1;
_cadena = "Hola";
_n = 5.125;
_b = 0xff;
}
//Campos a valor por defecto y luego
//cambia a
public MasRendimiento(int a) : this()
{
_a = a;
}
//Campos a valor por defecto y luego
//cambia cadena
public MasRendimiento(string cadena) : this()
{
_cadena = cadena;
}
//Campos a valor por defecto y luego
//cambia a y cadena
public MasRendimiento(int a, string cadena)
: this()
{
_a = a;
_cadena = cadena;
}
}
Esta es la "magia" que nos aporta C#, que mediante "this" podamos llamar de un constructor a otro.
No hay comentarios:
Publicar un comentario