BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース C# 8の小さな機能

C# 8の小さな機能

原文(投稿日:2018/09/19)へのリンク

デフォルトインターフェイスメソッドとnull許容参照のような大きなチケットアイテムに注意されがちだが、C# 8では小さな機能も検討されている。このサンプルはC#の将来バージョンになる可能性もある。

新しい代入演算子: &&= と ||=

最初のバージョン以来C#は、他の演算子と組み合わせた構文をサポートしている。これにはほとんどバイナリ演算子(+, -, & など)が含まれ、ブーリアン演算子&& と ||をショートカットすることを期待している。 「&&= と ||= 代入演算子」はこのリストを完了させる。

逐語的補完文字列

逐語的な文字列は@"から始まる。保管された文字列は$"から始まる。もし、逐語と補完の両方が必要な時はどうしたらよいか?@$"それとも$@"? 現在、一方が通り、もう一方はコンパイルエラーになるが、どちらだったかを思い出すのは難しい。

逐語的補完文字列と呼ばれる控えめな提案は、@$"を受け入れるように構文を拡張する。これは補完逐次的文字列($@")と同じように動作するため、後方を気にする必要がない。

この変更には、不要である、不一致を引き起こす、などの小さな議論が存在する。

`using`ステートメントが`IDisposable`と構造的に一致することを許可する

インターフェイスはC#コンパイラと不思議な関係にある。多くの場合、言語機能を使うために特定の抽象インターフェイスを実際に実装する必要はない。抽象インターフェイスに似たクラスのpublic APIを作ればよい。

古典的な例は`foreach`とIEnumerableである。もしクラスにGetEnumeratorというメソッドがあって、CurrentプロパティとMoveNextメソッドを持つオブジェクトが返されるとしたら、foreachを使える。実際には返される型は問題ではなくて、List<T>などのクラスではより高速な列挙子を実装できる 。これは「構造マッチング」と呼ばれる。

この提案では`using`ステートメントも構造マッチングがサポートされる。 IDisposableを実行しない破棄可能なクラスを見ないため、最初は有用ではない。しかし、ref構造体と呼ばれる新しい種類の型が存在する。これはインターフェイスを実装できないため、この提案なしではusingステートメントを使用できない。

foreachとusingの拡張メソッド

以前の提案のフォローアップでは、GetEnumeratorやDisposeを拡張メソッドとして追加することで、`foreach`や`using` を使用できるようになる。ここでは非常な特別な状況で使用する機能のみ言及している。例えば、Dispose拡張メソッドを、サードパーティライブラリであるCOMオブジェクト追加する(ことで、適切な場所でMarshal.ReleaseComObjectが呼び出せる)。

これはまだ正式な提案ではなく、前述の`using`ステートメントの変更に組み込むことができる。

暗示的な`using`ステートメントのスコープ

現在、`using`ステートメントは明示的なスコープ(つまり2つの中括弧)または、他の`using` が続く必要がある。この提案が通ると、以下のように書くことができるようになる:

using var a = new MyDisposable();
using var b = new MyDisposable();
using var c = new MyDisposable();

各変数は、現在のスコープを抜けると自動的に破棄される。機能的にはこれと同等だが、冗長性が少なく新しいスコープに入ることがない。

using (var a = new MyDisposable())
using (var b = new MyDisposable())
using (var c = new MyDisposable())
{
    // Some code
}

この変更は、破棄可能なオブジェクトが複数必要な時に特に便利だが、全てが同時に作られるわけではない。現在のスコープの最後に破棄されることを信じて、式の途中で破棄可能なオブジェクトを作ることもできる。

var results = myExcelReader.ReadResults(using new MyExcelSheet(excelFilePath));

この提案のひとつの批判は、`goto`などいくつかのステートメントと互換性がないことである。

Rate this Article

Adoption Stage
Style

この記事に星をつける

おすすめ度
スタイル

BT