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
Join

Newsletter

Nessuno spam, solo articoli interessanti ;)

Focus

Post correlati

semaphoreslim

SmaphoreSlim 101

SemaphoreSlim è una classe che permette la sincronizzazione di n thread che hanno una risorsa (scarsa) condivisa limitandone l’uso ad un numero massimo.

interlocked

Interlocked 101

La sincronizzazione dei thread è un elemento fondamentale nella programmazione asincrona, ne ho infatti parlato in vari post. La soluzione più versatile è sicuramente utilizzare

event

Come testare gli eventi

Testare che degli eventi siano stato effettivamente lanciati in C# non è immediato. Tipicamente è possibile testare che un evento venga lanciato aspettando un ManualResetEvent

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 ;)