C# 14 (.NET 10 世代の C# ) の機能、field キーワード / field-backed-properties を見てみます。
■ これまでは
プロパティの値を getter または setter で加工したい場合、自身でバッキングフィールドを作成していました。
■ これからは
field キーワードがプロパティ自身の値として使えます。バッキングフィールドを作成する必要はありません。
■ コードで例
Class C
{
// これはなら以前からできた
int p1; // バッキングフィールド
public int P1
{
get => p1; // バッキングフィールドの値を返却
set => p1 = (value > 0) // バッキングフィールドに値を設定
? value + 1
: -1;
}
// これができるようになった
public int P2
{
get; // デフォルト実装の書き方
set => field = (value > 0) // field キーワードに value を加工した値を設定
? value + 1
: -1;
// Preview バージョンを指定していない場合のエラー
// 機能 'field キーワード' は現在、プレビュー段階であり、*サポートされていません*。プレビュー機能を使用するには、'preview' 言語バージョンを使用してください。
}
}
■ getter での field
使う機会があるとは思えませんが、getter でも field キーワードが使えます。getter で 値を加工して返すばかりでなく、getter でプロパティ自身の値を変えることも。そんなコード見かけたら泣いてしまうかもしれませんが。
C c = new(); c.P3 = 1; Console.WriteLine(c.P3); // 3 Console.WriteLine(c.P3); // 4 class C { // こんなこともできる public int P3 { get => ++field; // getter で field キーワードを使用。field の値の変更も set => field = value + 1; } }
■ 今回のコード
GitHub に上げています。
■ 備えよう
新機能、いいですね。リリースに備えましょう。