web-dev-qa-db-ja.com

プロパティの取得メソッドと設定メソッドのラムダ

C#6.0では、次のように記述できます。

public int Prop => 777;

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

public int Prop {
   get => propVar;
   set => propVar = value;
}
45
Deni35

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

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

C#6.0のセッターにはこのような構文はありませんが、 C#7.0で導入 です。

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

C#7 は、他のメンバーの中でもセッターのサポートをもたらします。

表現力豊かなメンバー

式本体のメソッド、プロパティなどはC#6.0で大ヒットですが、すべての種類のメンバーでそれらを許可しませんでした。 C#7.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 _);              // finalizers
    public string Name
    {
        get => names[id];                                 // getters
        set => names[id] = value;                         // setters
    }
}
34
user247702

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

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

または

public int Prop { get; set; }
0