Qual è il vantaggio degli inizializzatori di proprietà auto senza costruttori primari?

1

In questo grafico sulle caratteristiche che sono dentro o fuori dalla prossima versione di Roslyn (in particolare, per C #), i costruttori primari sono fuori, ma gli inizializzatori di proprietà auto sono a.

Il miglior caso d'uso che ho visto per gli inizializzatori delle proprietà automatiche li sta usando insieme ai costruttori primari, cioè:

public class Customer(string first, string last)
{
    public string First { get; } = first;
    public string Last { get; } = last;
}

Tuttavia, senza il costruttore principale, non vedo un buon use case per l'inizializzazione della proprietà automatica che non può essere eseguita solo con un normale backing field, in questo modo:

public class Customer
{
    private string _first = "Foo";
    public string First { get { return _first; } };
}

Che senso ha utilizzare un inizializzatore della proprietà automatica senza la funzionalità di costruttore primaria?

    
posta Greg Bair 13.10.2014 - 13:13
fonte

2 risposte

6

Non tecnicamente hanno bisogno di inizializzatori. Puoi sempre avere una proprietà di backing e puoi sempre eseguire l'inizializzazione in (tutti) i tuoi costruttori.

Sono una comodità per ridurre la cerimonia che i programmatori devono passare per fare la "cosa giusta" (usare le proprietà per i membri pubblici, avere impostazioni predefinite coerenti, rendere leggibile il codice). Perché se fare la cosa giusta è più facile, le persone hanno più probabilità di farlo davvero.

    
risposta data 13.10.2014 - 13:36
fonte
0

What is the point of using an auto-property initializer without the primary constructor functionality?

Principalmente la trasparenza - se non si richiede l'inizializzazione (oltre all'inizializzazione predefinita dei campi di .NET), le proprietà automatiche sono una sintassi sintattica sintetica:

public string { get; set; }

Ora, nei tuoi esempi hai solo un getter, quindi senza un backing field che può essere inizializzato, sì, questi sono abbastanza inutili.

Potresti argomentare che potresti semplicemente esporre il campo direttamente, invece di usare la proprietà, ma poi, se vuoi cambiare il campo o la sua semantica di accesso, è un cambio di rottura.

    
risposta data 13.10.2014 - 13:38
fonte

Leggi altre domande sui tag