'Constructor concatenamento' è un approccio in cui un costruttore chiama un altro costruttore nella stessa cla ss. Ciò è particolarmente utile quando abbiamo una classe che definisce più costruttori. Ad esempio, stiamo creando una classe chiamata Persona nell'esempio seguente. Abbiamo anche tre campi che possiamo usare; Età, nome e colore dei capelli. Questa classe ha tre costruttori. Se non abbiamo usato l'approccio della 'Constructor concatenamento', il codice sarebbe qualcosa di simile di seguito:
Non utilizzando il costruttore concatenamento:
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;
}
}
Come si può vedere, in ogni costruttore stiamo assegnando un valore su Age, che duplica il codice. Abbiamo anche assegnato un valore a Name in due dei costruttori, quindi ancora più duplicazioni. Per eliminare questo problema, possiamo assegnare tutti i valori a Age, Name e HairColour nel costruttore con il maggior numero di parametri. Possiamo quindi chiamare quel costruttore quando vengono chiamati gli altri due costruttori. Vedere il codice qui sotto per vedere questo approccio "Chaining".
utilizzando il costruttore concatenamento:
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;
}
}
Speranza che aiuta - consente di risparmiare sulla duplicazione.
Un esempio più 'estremo' con un sacco di campi (e quindi un sacco di potenziali duplicazioni) è mostrata qui:
An example where it will definitely save on duplication
Eventuali commenti su perché è disponibile solo per i costruttori? Perché non posso usare la stessa tecnica con altri metodi sovraccaricati? –