in C#, Informatica, Programmazione

C# 9.0 – Target Typed

Nelle versioni precedenti di C# la definizione di un nuovo avveniva utilizzando la seguente sintassi:

public class Person
{
    public Person() { }

    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Nel codice precedente è stato creato il costruttore di default, un costruttore con parametri e due proprietà pubbliche. Ovviamente per la creazione di un nuovo oggetto possiamo usare :

var person = new Person();

oppure nella passando i parametri al costruttore:

var person = new Person("Andrea", "Merlin");

In entrambi i casi subito dopo il new, dobbiamo indicare il nome della classe che dovrà essere utilizzata (e quindi verrà richiamato il relativo costruttore). In C# 9.0 possiamo evitare di indicare il nome della classe da utilizzare. Vediamo come.

Scrivere codice in questo modo è perferttamente lecito:

Person person = new();

in pratica viene richiamato il costrutto senza parametri della classe Person. Analogamente possiamo scrivere:

Person person = new("Andrea", "Merlin");

Quello che avviene dietro alle quinte è che C# 9.0 “capisce” il tipo che dovrà essere utilizzato prendendolo dalla parte destra del codice (Person). Non è possibile usare Target-Typed dichiando la variabile con var:

var person = new("Andrea", "Merlin"); 

perchè in questo caso non è in grado di capire che tipo dovrà essere la variabile person.

Ovviamente questo meccanismo funziona anche nel caso in cui i parametri dei costruttori siano opzionali.

A questo punto ci si potrebbe chiedere qual’è la differenza nell’utilizzare queste due sintassi?

Person friend = new("Andrea", "Merlin");
var person = new Person("Andrea", "Merlin");

 Per entrambe le istruzioni precedenti, il compilatore C# produce esattamente lo stesso codice del linguaggio, quindi abbiamo la libertà di scegliere la sintassi che vogliamo. Almeno per quanto riguarda le variabili locali .

  • Articoli Correlati per Tag :