'Constructor encadenamiento' es una enfoque por el cual un constructor llama a otro constructor en la misma cla ss. Esto es particularmente útil cuando tenemos una clase que define múltiples constructores. Por ejemplo, estamos creando una clase llamada Persona en el siguiente ejemplo. También tenemos tres campos que podemos usar; Edad, Nombre y HairColour. Esta clase tiene tres constructores. Si no usamos el enfoque de 'Constructor de encadenamiento', el código sería algo así como a continuación:
No utilizar Constructor en cadena:
public class Person
{
private int Age;
private string Name;
private string HairColour;
public Person(int theAge)
{
Age = theAge;
}
public Person(int theAge, string theName)
{
Age = theAge;
Name = theName;
}
public Person(int theAge, string theName, string theHairColour)
{
Age = theAge;
Name = theName;
HairColour = theHairColour;
}
}
Como se puede ver, en cada constructor estamos asignando una valor a Age, que duplica el código. También hemos asignado un valor a Name en dos de los constructores, por lo que una vez más duplicación. Para eliminar este problema, podemos asignar todos los valores a Age, Name y HairColour en el constructor con la mayoría de los parámetros. Entonces podemos llamar a ese constructor cuando se llaman los otros dos constructores. Vea el código a continuación para ver este enfoque de "Encadenamiento".
Usando Constructor en cadena:
public class Person
{
private int Age;
private string Name;
private string HairColour;
public Person(int theAge):this(theAge, "", "")
{
//One parameter
}
public Person(int theAge, string theName):this(theAge, theName, "")
{
//Two Parameters
}
public Person(int theAge, string theName, string theHairColour)
{
//Three parameters
Age = theAge;
Name = theName;
HairColour = theHairColour;
}
}
Espero que ayude - se ahorra en la duplicación.
Un ejemplo más 'extremo' con una gran cantidad de campos (y por lo tanto una gran cantidad de posibles duplicaciones) se muestra aquí:
An example where it will definitely save on duplication
Cualquier comentario sobre por qué es sólo está disponible para los constructores? ¿Por qué no puedo usar la misma técnica con otros métodos sobrecargados? –