2016-12-23 10 views
13

私の場合:コンストラクタのlambda-syntax読み取り専用プロパティに割り当てることができないのはなぜですか?

public class A 
{ 
    public string _prop { get; } 
    public A(string prop) 
    { 
     _prop = prop; // allowed 
    } 
} 

別のケース:

public class A 
{ 
    public string _prop => string.Empty; 
    public A(string prop) 
    { 
     // Property or indexer 'A._prop' cannot be assigned to -- it is read only 
     _prop = prop; 
    } 
} 

どちらの構文:

public string _prop { get; } 

public string _prop => string.Empty; 

読み取り専用のプロパティを作成します。しかし、なぜ私は2番目のケースでそれを割り当てないのですか?

+0

また、 'public string Prop {get; } = string.Empty; '読み取り専用の自動実装プロパティを初期化します。 –

+0

最後に、私は記事を書いた:http://blog.rogatnev.net/2017/09/13/Varieties-of-properties.html – Backs

答えて

15
public string _prop => string.Empty; 

に等しい:string.Emptyメソッドgetのメソッドコードと同様であるので

public string _prop { get { return string.Empty; } } 

public string _prop { get; } 

に等しい:だから、あなたはコンストラクタからget_prop値を割り当てることができます

private readonly string get_prop; 
public string _prop { get { return get_prop;} } 

詳細はthe articleです。

+0

多くの感謝! :) –

+0

@TânNguyễn助けてうれしい! – Backs

関連する問題