Catena di costruttori

C# offre un metodo estremamente comodo per scrivere più costruttori di una stessa classe che si richiamano l’un l’altro.
Questa tecnica è detta constructor chaining.

E’ possibile inoltre concatenare costruttori della classe padre tramite il comando base.

Segue un esempio:

class Foo {
    private int id;
    private string name;
    // Costruttore effetivo
    public Foo(int id, string name) {
        this.id = id;
        this.name = name;
    }
    // estensione senza parametri in ingresso
    public Foo() : this(0, "") {   }
    // estensione passando solo l'id
    public Foo(int id) : this(id, "") {   }
    // estensione passando solo il name
    public Foo(string name) : this(0, name) {   }
    // Chiamata del costruttore della superclasse
    public Foo(string name) : base(name) {   }
}

E’ importante sottolineare che, qualora non venga utilizzato l’attributo this, il compilatore considererà l’estensione con il costrutore della superclasse, analogamente ad aver scritto base.

L’ordine con cui questi costruttori viene eseguito segue la logica, in quanto viene chiamato prima il costruttore concatenato, e poi il costruttore effetivamente chiamato dall’esterno.

Per capirne bene il funzionamento indico questo esempio, preso da questo post.

public Dog(string name, int age, string favToy) {
    Console.WriteLine("name/age/favToy constructor executing");
}
public Dog(string name, int age) : this(name, age, "ball") {
    Console.WriteLine("name/age constructor executing");
}
public Dog(string name) : this(name, 1) {
    Console.WriteLine("name constructor executing");
}

Dog dog = new Dog("dog name");

// name/age/favToy constructor
// name/age constructor
// name constructor

Indice

Share
Ultimi articoli

Codice Pragmatico

Contatti

Per informazioni, dubbi o consulenze non esitate a contattarmi.

Lascia un messaggio

Ricevi le ultime news

Iscrivi alla newsletter

Solo articoli interessanti, promesso ;)