2016-04-24 28 views
5

Microsoft introducono una nuova sintassi in C# 6 che consentono di impostare la vostra proprietà a sola lettura, come di seguito:sola lettura proprietà in C# 6.0

public class Animal 
{ 
    public string MostDangerous { get; } = "Mosquito"; 
} 

Mi chiedo qual è il valore aggiunto di tale approccio .

Qual è la differenza semplicemente scrivendo:

public class Animal 
{ 
    public const string MostDangerous = "Mosquito"; 
} 

o anche:

public class Animal 
{ 
    public string MostDangerous 
    { 
     get 
     { 
      return "Mosquito"; 
     } 
    } 
} 
+6

Che dire qualcosa del tipo: 'pubblica DateTime CreationTime {get; } = DateTime.Now; '? –

+0

Vedere questo articolo per vedere cosa c'è dietro le nuove funzionalità di C# 6: https://www.simple-talk.com/dotnet/.net-framework/whats-new-in-c-6/ –

risposta

10

Il tuo esempio è un po 'limitato. Guarda questo snippet:

class Foo 
{ 
    public DateTime Created { get; } = DateTime.Now; // construction timestamp 

    public int X { get; } 

    public Foo(int n) 
    { 
     X = n; 
    } 
} 

Le proprietà di sola lettura sono per-istanza e possono essere impostate dal costruttore. Molto diverso da un campo const il cui valore deve essere determinato al momento della compilazione. L'inizializzatore di proprietà è una funzione separata e segue le regole e le limitazioni degli inizializzatori di campo.

+0

Grande esempio per chiarire . Grazie @Henk Holterman – ehh

2

La sintassi più recente è uno sforzo per ridurre la verbosità di C#. È solo zucchero sintattico. L'IL generato è simile a una proprietà auto con un getter e un backing store.

1

Questo miglioramento di C# è stata presa direttamente da VB, ed elimina la necessità di attuare il campo di supporto e costruttore inizializzatore:

Public ReadOnly dateStamp As DateTime = Datetime.Now 
+0

La proprietà automatica del VB è stata presa direttamente da C# – Gqqnbig