2016-04-24 14 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 CREATIONTIME {取得します。 } = 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は、ゲッターとバッキングストアを持つ自動プロパティに似ています。 C#に

1

この改善は、VBから直接採取し、バッキングフィールドとコンストラクタの初期化子を実装する必要がなくなりました。

Public ReadOnly dateStamp As DateTime = Datetime.Now 
+0

VBの自動プロパティはC# – Gqqnbig

関連する問題