C#6.0では、次のように記述できます。
public int Prop => 777;
しかし、ゲッターとセッターを使用したいです。次のようなことをする方法はありますか?
public int Prop {
get => propVar;
set => propVar = value;
}
まず、構文は似ていますが、それはラムダではありません。
「 expression-bodied members 」と呼ばれます。これらはラムダに似ていますが、それでも根本的に異なります。ラムダのようにローカル変数をキャプチャできないことは明らかです。また、ラムダとは異なり、それらは名前でアクセスできます:)表現型のプロパティをデリゲートとして渡そうとすると、おそらくこれをよく理解できます。
C#6.0のセッターにはこのような構文はありませんが、 C#7.0で導入 です。
private int _x;
public X
{
get => _x;
set => _x = value;
}
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 } }
そのような構文はありませんが、古い構文はかなり似ています:
private int propVar;
public int Prop
{
get { return propVar; }
set { propVar = value; }
}
または
public int Prop { get; set; }