[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

C# 12公開 構文の簡素化、実行速度向上などにより生産性が向上Experimental属性とインターセプターによる高速化支援も

MicrosoftはC# 12のリリースを発表した。C# 12では構文が簡素化され、実行速度が向上した。

» 2023年12月06日 08時00分 公開
[@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 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つ以上のコレクションまたは列挙可能な式の要素を展開できる。

(提供:Microsoft)

任意のクラスまたは構造体で動作するプライマリーコンストラクタ

 C# 12では、プライマリーコンストラクタがレコード型だけでなく、全てのクラスや構造体(struct)で動作するように拡張された。プライマリーコンストラクタを使用すると、クラスの宣言と同時にコンストラクタのパラメータを定義できる。

 プライマリーコンストラクタパラメータは、クラス宣言全体のスコープとなるパラメータだ。プライマリーコンストラクタは、クラス、構造体、レコードクラス、レコード構造体など、どの型にも追加できる。クラス型や構造体型で使用する場合、プライマリーコンストラクタパラメータはクラスや構造体の定義全体のスコープになる。パラメータを使用してフィールドやプロパティを初期化したり、他のメンバーの本体で初期化したりすることが可能だ。

任意の型のエイリアス

 C# 12から、usingエイリアスディレクティブを使用する際に、配列型、ダブル型、ポインタ型などが有効な型として使用可能になった。他のusingエイリアス同様、これらの型はファイルの先頭やグローバルなusing文で使用できる。

デフォルトのラムダパラメーター

 C# 12から、ラムダ式でデフォルトのパラメータを宣言できるようになった。デフォルトのラムダパラメーターは、呼び出しコードに値の受け渡しを省略させ、呼び出しコードを壊すことなく既存のラムダ式にパラメータを追加できる。これは、ラムダ式へのアクセスの簡略化につながる。

コードの高速化

 C# 12では、コードを高速化するためにref readonlyパラメータとインライン配列が追加された。

ref readonly パラメータ

 ref readonlyパラメータの追加により、参照渡しと値渡しの組み合わせが可能になった。in パラメータと同様に、ref readonly パラメータは変更できない。メソッドが引数を変更しないが、そのメモリ・ロケーションが必要な場合、メソッドはref readonlyパラメータを宣言する必要がある。

インライン配列

 インライン配列は、構造体ベースの固定長配列型で、メモリバッファーを安全に扱う方法を提供する。インライン配列の使用により、バッファーを操作する際のアプリケーションのパフォーマンスが向上可能だ。

高速化の支援

 C# 12では、高速化の支援としてExperimental属性とインターセプターの2つの機能が追加された。

Experimental属性

 型、メンバーおよびアセンブリにExperimental属性を付けることで、実験的機能のステータスを明確にできるようになった。ある型にExperimental属性をマークした場合、そのメンバーは全てExperimental属性と見なされる。例えば、アセンブリやモジュールがマークされた場合は、その中の全ての型がExperimental属性とマークされる。

インターセプター

 インターセプターは実験的な機能で、C# 12のプレビューモードで利用できる。インターセプターは、メソッド呼び出しのリダイレクトを可能にする。例えば、特定のパラメータ用に生成されたメソッドの最適化バージョンで、効率の悪い一般化メソッドを置き換えることが可能だ。

 ただし、この機能は将来のリリースで変更または削除される可能性があるため、本番環境やリリース済みのアプリケーションでは使用しないことが望ましい。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。