2016-04-02 1 views
17

のゲッターとセッターのために:ラムダ私は書くことができますC#6.0ではプロパティ

public int Prop => 777; 

しかし、私はゲッターとセッターを使用します。 次のようなことをする方法はありますか?

public int Prop { 
    get => propVar; 
    set => propVar = value; 
} 
+2

いいえ、唯一のゲッター... –

+0

何の問題あなたはここで解決しようとしている:?C#7.0は 表現体を持つことができるもののリストに アクセサ、コンストラクタとファイナライザを追加しますかフィールドからの値の読み込みや格納だけでなく、自動実装されたプロパティがすでにあなたの必要性をカバーしている場合より複雑なロジックを追加しないと、これは意味をなさないでしょう。 '=>'構文は価値がありますが、自動実装されたプロパティではあまりにも複雑すぎるほど短くなっています。 – hvd

+1

なぜ自動プロパティを使用しないのですか? – slugster

答えて

30

まず、構文は似ていますが、まずラムダではありません。

expression-bodied members」と呼ばれます。彼らはラムダに似ていますが、根本的に異なります。明らかに、lambda doのようなローカル変数を取り込むことはできません。また、ラムダと違って、それらは名前でアクセスできます:)表現型のプロパティをデリゲートとして渡そうとすると、おそらくこれが理解できます。

C#6.0のセッターの構文はありませんが、です。

private int _x; 
public X 
{ 
    get => _x; 
    set => _x = value; 
} 
+1

なぜラムダではないのですか? – wishmaster35

+4

@ wishmaster35それは「表現身体のメンバー」と呼ばれています。彼らはラムダに似ていますが、根本的に異なります。明らかに、lambdas doのようなローカル変数は取り込めません。また、ラムダと違って、それらは名前でアクセスできます:)表現型のプロパティをデリゲートとして渡そうとすると、おそらくこれが理解できます。 –

2

そこには、このような構文はありませんが、古い構文はかなり似ています。

private int propVar; 
    public int Prop 
    { 
     get { return propVar; } 
     set { propVar = value; } 
    } 

それとも

public int Prop { get; set; } 
19

C# 7は、他のメンバーの中で、セッターのためのサポートを提供します:

他の表記のボディメンバー

エクスプレッションボディのメソッドやプロパティなどは、C#6.0では大ヒットですが、 ではすべてのメンバーでそれらを許可していませんでした。

class Person 
{ 
    private static ConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>(); 
    private int id = GetId(); 

    public Person(string name) => names.TryAdd(id, name); // constructors 
    ~Person() => names.TryRemove(id, out *);    // destructors 
    public string Name 
    { 
     get => names[id];         // getters 
     set => names[id] = value;       // setters 
    } 
} 
関連する問題