MicrosoftはC# 12のリリースを発表した。C# 12では構文が簡素化され、実行速度が向上した。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Microsoftは2023年11月14日(米国時間)、C# 12のリリースを発表した。C# 12では、構文が簡素化され、実行速度が向上した。本記事ではC# 12の概要を解説する。
C# 12ではコード簡素化のために、コレクション式、プライマリーコンストラクタ、任意の型のエイリアス、ラムダ式のデフォルトパラメータが導入された。
従来コレクションを作成するには、以下のように型ごとに異なる構文が必要だった。
int[] x1 = new int[] { 1, 2, 3, 4 }; int[] x2 = Array.Empty<int>();
しかし、C# 12では[ ]で統一された。上記の構文は以下のようになる。
int[] x1 = [1, 2, 3, 4]; int[] x2 = [];
コレクション式により単一の構文が使えるだけでなく、コンパイラが高速なコードを作成してくれる。さらに、new spread演算子(「..」)を使用して、コレクション式内に1つ以上のコレクションまたは列挙可能な式の要素を展開できる。
C# 12では、プライマリーコンストラクタがレコード型だけでなく、全てのクラスや構造体(struct)で動作するように拡張された。プライマリーコンストラクタを使用すると、クラスの宣言と同時にコンストラクタのパラメータを定義できる。
プライマリーコンストラクタパラメータは、クラス宣言全体のスコープとなるパラメータだ。プライマリーコンストラクタは、クラス、構造体、レコードクラス、レコード構造体など、どの型にも追加できる。クラス型や構造体型で使用する場合、プライマリーコンストラクタパラメータはクラスや構造体の定義全体のスコープになる。パラメータを使用してフィールドやプロパティを初期化したり、他のメンバーの本体で初期化したりすることが可能だ。
C# 12から、usingエイリアスディレクティブを使用する際に、配列型、ダブル型、ポインタ型などが有効な型として使用可能になった。他のusingエイリアス同様、これらの型はファイルの先頭やグローバルなusing文で使用できる。
C# 12から、ラムダ式でデフォルトのパラメータを宣言できるようになった。デフォルトのラムダパラメーターは、呼び出しコードに値の受け渡しを省略させ、呼び出しコードを壊すことなく既存のラムダ式にパラメータを追加できる。これは、ラムダ式へのアクセスの簡略化につながる。
C# 12では、コードを高速化するためにref readonlyパラメータとインライン配列が追加された。
ref readonlyパラメータの追加により、参照渡しと値渡しの組み合わせが可能になった。in パラメータと同様に、ref readonly パラメータは変更できない。メソッドが引数を変更しないが、そのメモリ・ロケーションが必要な場合、メソッドはref readonlyパラメータを宣言する必要がある。
インライン配列は、構造体ベースの固定長配列型で、メモリバッファーを安全に扱う方法を提供する。インライン配列の使用により、バッファーを操作する際のアプリケーションのパフォーマンスが向上可能だ。
C# 12では、高速化の支援としてExperimental属性とインターセプターの2つの機能が追加された。
型、メンバーおよびアセンブリにExperimental属性を付けることで、実験的機能のステータスを明確にできるようになった。ある型にExperimental属性をマークした場合、そのメンバーは全てExperimental属性と見なされる。例えば、アセンブリやモジュールがマークされた場合は、その中の全ての型がExperimental属性とマークされる。
インターセプターは実験的な機能で、C# 12のプレビューモードで利用できる。インターセプターは、メソッド呼び出しのリダイレクトを可能にする。例えば、特定のパラメータ用に生成されたメソッドの最適化バージョンで、効率の悪い一般化メソッドを置き換えることが可能だ。
ただし、この機能は将来のリリースで変更または削除される可能性があるため、本番環境やリリース済みのアプリケーションでは使用しないことが望ましい。
Copyright © ITmedia, Inc. All Rights Reserved.