.NET Core 3 新規機能紹介

.NET Core 3 新規機能紹介

.NET CoreはMicrosoftのフリーでオープンソースなクロスプラットフォームで、Windows、Linux、macOSにも対応しています。2019年5月7日に.NET Core 3.0の誕生が発表されており、2019年12月3日に正式にリリースされました。そして最新バージョンの.NET Core 3.1は、数か月後の2019年12月3日にもリリースされました。今度のアップデートで多くの改善と新機能も追加され、.NET Core 1 と 2のバージョンよりも改良されたようです。ただし、この記事の範囲内では、Windows Formsによるプログラミング、.NET CoreのWPF、Blazorフレームワーク、C#8の新機能などといった優れた機能のみをご紹介したいと思います。

対応プラットフォーム

サポートされているオペレーティングシステムは次の通りです。

  • Alpine: 3.9+
  • Debian: 9+
  • openSUSE: 42.3+
  • Fedora: 26+
  • Ubuntu: 16.04+
  • RHEL: 6+
  • SLES: 12+
  • macOS: 10.13+
  • Windows Client: 7, 8.1, 10 (1607+)
  • Windows Server: 2012 R2 SP1+

 

ダウンロード

ダウンロードしてから.Net Coreがご使用いただけます。なお、すでに.NET Coreを使用ている場合は、次のリンクを押下して新しいバージョンをインストールこともできます。

https://dotnet.microsoft.com/download/dotnet-core

開発環境

.NET Core 3.0 では C# 8.0 のサポートが追加されています。 C# の拡張機能では、Visual Studio 2019 バージョン 16.3 以降、Visual Studio for Mac 8.3 以降、または Visual Studio Code を使用することを強くお勧めします。

 

.NET Framework Net. Core2からの移植

現在 .NET Framework で実行しているコードの .NET Core への移植を検討する場合があります。詳細につきましては次の記事をご参照ください。移植プロセスの概要と便利なツールのリストをすべて記載されています。

https://docs.microsoft.com/ja-jp/dotnet/core/porting/

バージョン 2.2 からバージョン 3.0 に移行する場合、この記事の一覧にある破壊的変更がご使用のアプリに影響する可能性があります。

https://docs.microsoft.com/ja-jp/dotnet/core/compatibility/2.2-3.0

.NET Core 3の新機能

Windows forms and Windows Presentation Foundation (WPF):

最も大きな強化点の 1 つは、Windows デスクトップ アプリケーションのサポートです。.NET Core 3.0 SDK コンポーネントの Windows デスクトップを使用して、Windows フォームおよび Windows Presentation Foundation (WPF) アプリケーションを移植することができます。ただし、Windowsでしか使いません。

ところで、.NET Core CLIまたはVisual Studio 2019を使用することで、新しいアプリを作成できます。また、.NET Coreの最新バージョンで実施するなら、フレームワークの展開(自己完結型またはサイドバイサイド)、APISの特定のクラス(I / Oやネットワークなど)の実行時パフォーマンスの向上、新しいC#8の言語機能、およびMSIXパッケージテクノロジ、NuGETを介したプラットフォームAPI、XAMLアイランドを使用したUIの更新といったWindows 10の機能など利用できます。

dotnet new wpf

dotnet new winforms

 

Visual Studio 2019には、テンプレートを使用して.NET Core 3 Windows FormsおよびWPF用の新しいプロジェクトが作成できます。

Blazor

Blazor は、.NET を使って対話型のクライアント側 Web UI を構築するためのフレームワークです。アドオン無しで利用できるのは、Blazorの大きな利点の一つです。起動方法としては2つがあり、サーバー上で起動するか、もしくはWebAssemblyを使ってブラウザで起動しても構いません。.Net Core 3で、上記の方法をどれ選んでもBlazorプロジェクトを作成することができます。以下の画像の通りにBlazor Appのテンプレートを選んでもらったらJavascriptなしでクライアント側 Webが作れます。

コンパイル/デプロイ

.NET Core では、既定でフレームワーク依存の実行可能ファイルが作成されるようになりました。dotnet build または dotnet publish の実行中に、使用している SDK の環境およびプラットフォームと一致する実行可能ファイルが作成されます。ファイルをダブルクリックすることでアプリが実行します。

単一ファイルの実行可能ファイル

これも.NET Core 3の優秀な機能の一つです。dotnet publish コマンドによって、プラットフォーム固有の単一ファイルの実行可能ファイルにアプリをパッケージ化することができます。 実行可能ファイルは自己展開型であり、アプリの実行に必要なすべての依存関係 (ネイティブを含む) が含まれます。

アプリを発行するときに、「Edit Configuration」を選択してから「Produce single file」をクリックすることで、この機能を有効にすることができます。

他の機能:

・ハイパフォーマンスなJSON APIs

・ガベージコレクターが使用するメモリが少ない

・.NET Standard 2.1

・Linux改善

・セキュリティ改善

・新しいSngalRコードの更新

・その他

 

C#8の新機能

今回は、パフォーマンスとコードの最適化を強化するためにアプリケーションで使用すべきパターンをご紹介させていただきます。

Ranges, indexes

インデックスは、配列インデックスを記述する新しいタイプです(0から始まります)。特に、プレフィックス^を使用すると、インデックスは末尾からカウントされます。

これから例を挙げます。

Index i1 = 0;

Index i2 = ^1;

int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// a[i1] = 1, a[i2] = 9;

 

IndexからRangeが作成できます。

var arr1 = [1..4];

var arr2 = [^2..^0];

 

Null 許容参照型

C# 8.0 には null 許容参照型が導入されています。これは、null 許容値型が値型を補完するのと同じように、参照型を補完するものです。これらの新しい型を使用して、一部の変数では常に値を持つ必要があり、他の変数では値が欠落することも可能であるという設計意図をさらに明確に示すことができます。プロジェクトでこの機能を有効にするには、次のプロパティを調整してください。

<PropertyGroup>

<Nullable>enable</Nullable>

</PropertyGroup>

string? str = null;

Console.Writeline($”str[0]”); // you will get the warning because str may be null

string? str = null;

if (str != null) {

Console.Writeline($”str[0]”); // the checking will remove the warning

}

 

Async streams:

IAsyncEnumerable<T> 型は、IEnumerable<T> の新しい非同期バージョンです。 この言語では、その要素を使用するために IAsyncEnumerable<T> よりも await foreach を行い、要素を生成するために yield return を使用することができます。

非同期ストリームの生成の両方の使用例を次に示します。 foreach ステートメントは非同期であり、yield return を使用して呼び出し元の非同期ストリームを生成します。 (yield return を使用する) このパターンは、非同期ストリームを生成するモデルに推奨されます。

await foreach(var query in getQueriesAsync(filter)

{

Console.WriteLine(query);

}

他の機能:

  • Switch 式
  • プロパティのパターン
  • デフォルトの実装
  • IEEE 浮動小数点数
  • 他のパターン

詳細についてはこれを参照してください。

https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8

.NETの未来

以上、.NET Core 3 と C#8の新機能をまとめました。なお、それぞれの機能の詳細や使い方、または.NET Core 3 と C#8の改善点などを具体的に知りたい方は以下のリンクでご参照ください。

Microsoftによって、現在の.NET Core 3は.NET Core世代の最も安定したフル機能バージョンで、多くの開発者とビジネス企業などにとっても役に立つと自信を持っております。しかし、2020年後半にリリースされる予定の.NET 5には、もっと色々と期待できるでしょう。.NET Core 3と.NET 5の互換性についてあまり心配する必要はありません。 .NET 5は、.NETフレームワークと.NET Coreの統合プラットフォームであり、Windows、Linux、macOS、iOS、Androidなどを対象とすることが期待されているからです。

 

引用文献:

https://docs.microsoft.com/en-us/dotnet/core/whats-new/dotnet-core-3-0

https://docs.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-3.0?view=aspnetcore-3.1

https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8