C#14では今までも使えた拡張メソッドに加えて「拡張プロパティ」が使えるようになった

C#14では今までも使えた拡張メソッドに加えて「拡張プロパティ」が使えるようになった話です。

今まで拡張メソッドは使えたが、プロパティにしたいこともあった

これまでのC#では、以下のように既存のクラスに対して「拡張メソッド」を作ることができました。

public static class DateTimeExtensions
{
    // 週末かどうかを返却する拡張メソッド
    public static bool IsWeekend(this DateTime date)
    {
        return date.DayOfWeek is DayOfWeek.Saturday or DayOfWeek.Sunday;
    }
}

// 使い方
var today = DateTime.Now;
if (today.IsWeekend())
{
    Console.WriteLine("今日は休みです!");
}

しかし、この例の「IsWeekend」のようなものは、本来、メソッドではなくプロパティとして実装した方が適切です。

拡張プロパティが使えるようになった

これに対して C# 14 では、extension ブロックを使って以下のように書くことでプロパティを拡張できるようになりました。

public static class DateTimeExtensions
{
    extension(DateTime date)
    {
        public bool IsWeekend => date.DayOfWeek is DayOfWeek.Saturday or DayOfWeek.Sunday;
    }
}

var today = DateTime.Now;
if (today.IsWeekend) // プロパティとして使える
    Console.WriteLine("今日は休みです!");