KENTEM TechBlog

建設業のDXを実現するKENTEMの技術ブログです。

【C#】C#14にて待望の拡張メンバーが登場!

こんにちは!C#愛好家です。
執筆中の2025年6月時点での最新の正式リリースバージョンはC#13ですが、今冬に.NET10と共にリリースされる予定の「C#14」についてご存じでしょうか?

C#14では

な、な、ナ、ナント、

拡張メンバー(拡張プロパティ)

が実装されます!(パチパチパチ)

C#erの皆さんなら誰しも待ち望んでいた機能が簡単に実装できます!
今回はその概要をお伝えします!

事前準備

C#14は2025年6月時点ではまだプレビュー段階です。
プレビュー機能を利用するには準備が必要なので解説します。

.NET10 SDK

C#14を使うには.NET10のSDKが必要になります。
下記からお使いの環境にあったものをダウンロードし、インストールを行ってください。 dotnet.microsoft.com

開発環境

Visual Studio 2022 Previewをダウンロードし、インストールします。
こちらをインストールすると、正式リリース前のプレビュー機能が利用可能になります! visualstudio.microsoft.com

プロジェクト作成

Visual Studio 2022 Previewを起動したら、プロジェクトを作成します。
今回は「コンソール アプリ」を選択します。
フレームワークで「.NET 10.0(プレビュー)」を選ぶことを忘れないでください。

作成を終えたらプロジェクトを選択し、.csprojファイルに以下の一行を追加します。
<LangVersion>Preview</LangVersion>
この一行を入れることで、プレビュー段階の機能が使えるようになります!

実装方法

準備が整いましたので、実際に実装してみましょう。
とその前に、以前までの実装方法も軽くおさらいしておきましょう!

以前までの実装

そもそもC#13までは、拡張できるのは「メソッド」のみでした。
なのでプロパティを拡張しようとしたら、拡張メソッドとしてプロパティ風に実装する、もしくはラッパークラスを作るしかできませんでした。

//メソッドを使ってプロパティ風に実装
public static class PersonExtensions
{
    public static string GetFullName(this Person person)
        => $"{person.FirstName} {person.LastName}";
}

//ラッパークラスを作ってプロパティを実装
public class PersonWrapper
{
    private readonly Person _person;
    public PersonWrapper(Person person) => _person = person;
    public string FullName => $"{_person.FirstName} {_person.LastName}";
}

これでもまぁいいですが、プロパティではないですし・・・多少コストが掛かっちゃいますよね?

C#14での実装

お待たせしました!待望のC#14の実装です!

public static class PersonExtensions
{
    extension(Person person)
    {
        // プロパティ
        public string FullName => $"{person.FirstName} {person.LastName}";
        // メソッドも普通に書けるよ
        public string GetInitials() => $"{person.FirstName[0]}.{person.LastName[0]}.";
    }
}

非常にシンプルです・・・(感涙)
extensionという新しいキーワードが追加されています。
こちらを使うとプロパティもメソッドも一緒くたに追加できます。

他の有用な例もお見せします!

public static class  SomeExtensions
{
    extension<T>(IEnumerable<T> source)
    {
        // IEnumerableでもインデクサが使えるようになる
        // IListかどうか気にしないで source[0] のような使い方ができる!
        public T this[int index] => source.Skip(index).First();
    }

    extension(int)
    {
        // int.Zero のように使える何でもアリな例
        public static int Zero => 0;
    }
}

これらの例もリリース後は動くようですが、2025年6月時点ではエラーがあるようで上手く動きません・・・
これからの開発に期待しましょう!

MicrosoftのC#14のページも随時更新されていますので必読ですよ! learn.microsoft.com

まとめ

非常にリリースが待ち遠しいですね。
拡張メンバーに限らず、最新のプレビュー機能を試してみると良い気付きが得られると思います。
皆さんの声が開発に役立つかもしれません。ご興味がある方はお試しください。

おわりに

KENTEMでは、様々な拠点でエンジニアを大募集しています! 建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。 recruit.kentem.jp career.kentem.jp