2016-04-24 157 views
5

微軟推出C#中的新語法6,讓您設置屬性爲只讀如下:只讀屬性,在C#6.0

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

我想知道什麼是這種做法的附加價值。

是通過什麼只是寫的區別:

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

甚至:

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

什麼是這樣的:'公共DateTime的創建時間{獲得; } = DateTime.Now;'? –

+0

看到這篇文章,看看新的C#6功能背後有什麼:https://www.simple-talk.com/dotnet/.net-framework/whats-new-in-c-6/ –

回答

10

你的例子是有點有限。看看這段代碼:

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

    public int X { get; } 

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

只讀屬性是每個實例,可以從構造函數中設置。與編譯時必須確定其值的const字段非常不同。屬性初始值設定項是一個獨立的功能,並遵循字段初始值設定項的規則和限制。

+0

很好的例子,使之清楚。謝謝@Henk Holterman – ehh

2

較新的語法是努力減少C#的冗長度。這只是語法糖。生成的IL類似於具有getter和後備存儲的自動屬性。

1

這改善C#是直接取自VB,並消除了需要落實支持字段和構造函數初始化:

Public ReadOnly dateStamp As DateTime = Datetime.Now 
+0

VB的自動屬性是直接從C# – Gqqnbig