C#13の新機能:部分プロパティ
.NET9と同時にリリース予定の C# 13 では「部分プロパティ」がやっと導入される見込みです。これの何が嬉しいかというと、ソースジェネレータがプロパティにも対応できるという事です。
例えばC# 11/NET 7 で導入された[GeneratedRegex]
(正規表現の高速化)は部分メソッドで生成されていましたが、部分プロパティでもっと自然に書けます。
//部分メソッド(C#11)で書いた場合
[GeneratedRegex("abc|def")]
private static partial Regex AbcOrDefMethod();
if (AbcOrDefMethod().IsMatch(text)) { //ちょっと違和感がある書き方
}
//部分プロパティ(C#13)導入後
[GeneratedRegex("abc|def")]
private static partial Regex AbcOrDefProperty { get; }
if (AbcOrDefProperty.IsMatch(text)) { //自然体でかける
}
MVVM ToolKitで部分プロパティ対応
となると期待されるのが、MVVM ToolKitで違和感のある書き方だった[ObservableProperty]
の改善です。
以前の紹介記事「.NET用 MVVM Toolkit v8でMVVMコードを短く」に書いたようにver8では変更通知プロパティは以下のようにバッキングフィールドを書いています。
[ObservableProperty]
private string name;
これで変更通知対応したName
プロパティが生成されますが、コード上に無いため間違えやすく、現在はアナライザーを使って「name
じゃなくて Name
を使ってね」と警告が出してしのいでます。
これは部分プロパティが導入されれば解決できるはずです。
[ObservableProperty]
public partial string Name { get; set; }
MVVM ToolKit側では 昔から要望が上がっていたのですが、部分プロパティのC#への導入が前回見送られたのでToolKit側も見送られました。
しかしMVVM ToolKit ver9 ではかなり前からこの機能はバックログに積まれています。早めに実現されるとうれしいですね。
GitHub: CommunityToolkit/Projects/9.0
https://github.com/orgs/CommunityToolkit/projects/6/views/1
2024年11月17日追記
C#13/.NET9もリリースされ、このPRが無事マージされたようです。
(ver8.4でリリースされました)
が、C#13にプロパティの「field」キーワードが導入されなかったことで現時点ではLangVersion=preview
(C#14相当)が必要になるようです。