BT

C# 8.0プレビュー

| 作者: Jonathan Allen フォローする 530 人のフォロワー , 翻訳者 尾崎 義尚 フォローする 0 人のフォロワー 投稿日 2017年8月28日. 推定読書時間: 4 分 |

原文(投稿日:2017/08/23)へのリンク

Channel 9のビデオにおいて、Mads Torgersen氏はC# 8の最初の4機能をデモした。

Null許容参照型

我々は以前から Null許容参照型をカバーしてきたが、簡単にこのアイディアを説明すると、参照型がデフォルトでNull許容にならなくなるということである。代わりにあなたは、値型をNull許容にするのと同じように“Type?”という構文を使用して、明示的に指定する必要がある。

非Null許容型にnullを代入すると、コンパイラが警告する。同様に、Null許容型から値を読み込むときに事前にNullを明示的にチェックしていない場合は、コンパイラが警告する。つまり開発者に必要とされるのは、適切なタイミングでクエスチョンマークを付けるだけである。

私達のレポート以降、この機能には新しい構文が追加された。Null許容変数xが実際にはnullではないことがわかっているシナリオでも、それをコンパイラが証明することはできない。このケースの場合、x!.Method()を使用することで、潜在的なnull参照例外に対するコンパイラ警告を押さえることができる。

非同期ストリーム (foreach asyncとしても知られる)

非同期ストリームはIEnumerableの非同期同等機能である 以前、私達がレポートした非同期ストリームで、彼らは2015年から取り組んでいることがわかる。議論の結果、彼らが解決した構文は以下の通り:

foreach await (string s in asyncStream)

非同期イテレータを定義するときには、この関数シグニチャを使用する:

async IAsyncEnumerable<T> MethodName()

通常のIEnumerableメソッドと同様に、遅延の方法でオブジェクトのストリームを構築するために“yield return”を使用できる。

Reactive ExtensionsではなくIObservable<T>を使う利点は、利用者が流量を制御できる点である。これは“プルモデル”と呼ばれる。対象的にIObservable<T>は“プッシュモデル”であり、生成側は消費側が処理できる量よりも多く放出できる。

デフォルトインターフェイス実装

デフォルトインターフェイス実装は、基本的には多重継承の限定された形式である。これにより抽象インターフェイスは、抽象クラスのように完全なメソッドを定義できる。ただし、抽象インターフェイスはコンストラクタやフィールドを宣言することはできない。

注: ConditionalWeakTableを使ってインターフェイスのフィールドをシミュレートできる。

デフォルトインターフェイス実装の主な利点として、下位互換を損なうことなく既存のインターフェイスに新しいメソッドを追加できることだ。これは保証されているわけではなく、考慮可能な適切なデフォルトメソッドがあるときのみ機能します。

これは非常に議論を巻き起こす機能だ。ここでその議論を繰り返すことは避けるが、以前の記事であるデフォルトインターフェイス実装において、この要約を読むことができる。

Extension(拡張) Everything

長年、C#に対する苦情のひとつは拡張メソッドはかけるが、拡張プロパティが書けないことであった。実際のところ、現在のパターンを使って、拡張プロパティやイベントを定義する方法がない。加えて、静的クラスに拡張メソッドを追加することは、多くの人に取って奇妙なことであった。

新しい設計では「extension(拡張)」と呼ばれる新しいトップレベル構造がある。たとえばCustomerクラスの拡張メソッドとプロパティを作成する場合、以下のように書ける:

extension CustomerExt extends Customer {
    //methods and properties go here
}

インターフェイスと同様にextensionsにインスタンスフィールドの定義できないが、ConditionalWeakTableを使ったシミュレートはできる。静的フィールドの定義も可能だ。

プロパティ、イベント、演算子オーバーロードに加えて、コンストラクターの拡張も可能にしようと考えている。Extensionコンストラクタは、ファクトリとオブジェクトプールのシナリオにおいて、非常に興味深いだろう。

拡張インターフェイス

既存のクラスに新しいインターフェイスを追加したり、検討したりする拡張インターフェイス。これはC# 8の機能ではなく、基本的なランタイムを変更する必要がある。

C#の未来に関する詳細は、C#言語設計レポを確認してほしい。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT