rksoftware

Visual Studio とか C# とかが好きです

C# 2.0 以降の新機能の確認 - C# 8.0 - verbatim 補間文字列の拡張

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

verbatim 補間文字列の拡張

 https://docs.microsoft.com/ja-jp/dotnet/csharp/tutorials/string-interpolation#how-to-use-escape-sequences-in-an-interpolated-string
 補完文字列の @""、$"" を組み合わせて使う際に任意の順番で書くことができる。以前は $@"" だけだったが、 @$"" とも書けるようになった。

var text = "十万石饅頭";
// これまでは $@ だけ
Console.WriteLine($@"C:\saitama\gyoda\{text}");  // C:\saitama\gyoda\十万石饅頭

// これからは @$ も OK
Console.WriteLine(@$"C:\saitama\gyoda\{text}");  // C:\saitama\gyoda\十万石饅頭

C# の開発環境のインストール用リンク

SDK

.NET

次のサイトからダウンロードしてインストールします。
※インストール方法の記事へのリンク担っているものもあります。
Download .NET

OS ごとの選択するリンク

OS リンク
Windows Download .NET SDK x64
Linux Install .NET
mac Download .NET SDK

.NET Core

次のサイトからダウンロードしてインストールします。
※インストール方法の記事へのリンク担っているものもあります。
Download .NET

OS ごとの選択するリンク

OS リンク
Windows Download .NET Core SDK x64
Linux Install .NET Core
mac Download .NET Core SDK

.NET Framework

次のサイトからダウンロードしてインストールします。
Download .NET

OS ごとの選択するリンク

OS リンク
Windows Download .NET Framework Dev Pack
Linux インストールできません
mac インストールできません

IDE・エディタ

Visual Studio

次のサイトからダウンロードしてインストールします。
ダウンロード

学習用途ではコミュニティ版が使えます。

OS ごとの選択するリンク

OS リンク
Windows 無料ダウンロード
Linux インストールできません
mac インストールできません

Visual Studio を使う場合は、インストール時に作りたいアプリに応じてワークロードを選択します (インストール後に変更可)。選んだワークロードに応じて必要な SDK がインストールされるので、前述の SDK のインストールは省略できます。

Visual Studio for Mac

次のサイトからダウンロードしてインストールします。
ダウンロード

学習用途ではコミュニティ版が使えます。エディション (コミュニティなど) はインストール後に選択します。

OS ごとの選択するリンク

OS リンク
Windows インストールできません
Linux インストールできません
mac 無料ダウンロード

Visual Studio for Mac を使う場合は、インストール時に作りたいアプリに応じてターゲットを選択します。選んだワークロードに応じて必要な SDK がインストールされるので、前述の SDK のインストールは省略できます。

Visual Studio Code

次のサイトからダウンロードしてインストールします。
ダウンロード

OS ごとの選択するリンク

OS リンク
Windows 無料ダウンロード
Linux 無料ダウンロード
mac 無料ダウンロード

C# で作れるアプリ(モバイル)

作れるアプリ

C# では多彩な形式のアプリが作れます。ほぼ JavaScript が支配的な実行環境となる Web フロントエンドを除いてほぼなんでも作れます。Web フロントエンドについては Web Assembly という技術であれば C# でも作れますが、まだ仕事は少ないのが実情でこれからの技術です。

モバイル

スマートフォン・タブレットなどのスマートデバイスのアプリです。標準技術では Android 向け iOS 向けなどそれぞれ別の技術で作りますが、C# では一つの技術で複数のプラットフォーム向けに作れるクロスプラットフォーム技術が比較的多く存在します。

Xamarin

今回紹介する中で最も長く使われている技術です。Android や iOS などのプラットフォーム機能を使いやすいのが特徴です。

Uno Pratform

今、C# を好むエンジニアの中で高い注目を集めている技術です。Web の項目でも説明したようにモバイルアプリやデスクトップアプリ、WebAssembly といったクロスプラットフォームアプリを作れます。

Blazor Mobile Bindings

Web の項目で挙げている Blazor の技術でモバイルアプリを作る技術です。C# を好むエンジニアの中でも着目度はそれほど高くない技術ですが、Web の Blazor は注目度の高い技術なので将来性は十分です。注意点としてはまだ製品としてのリリースを迎えていないことで、今すぐには仕事にはなりづらい点が挙げられます。

C# で作れるアプリ(Web)

作れるアプリ

C# では多彩な形式のアプリが作れます。ほぼ JavaScript が支配的な実行環境となる Web フロントエンドを除いてほぼなんでも作れます。Web フロントエンドについては Web Assembly という技術であれば C# でも作れますが、まだ仕事は少ないのが実情でこれからの技術です。

Web

ローカルマシン上ではなく Web を介してブラウザなどで使うアプリです。皆さんがインターネットで使っているサービスのようなアプリが作れます。

ASP.NET Core

C# で Web アプリを作るスタンダードな選択肢です。特別な理由がなければこの形式を選択します。C# で Web アプリを作る仕事としても最も多く選択される形式です。

Blazor Server

C# で Web アプリを作るのは前述の ASP.NET Core と同じですが、Web の仕組みをあまり知らなくともなんとなく作れる (ASP.NET Core と比較しての話です) のが特徴の一つです。後述の Blazor WebAssembly とソースコードの書き方は同じですが動作の仕組みは違っています。まだ新しい技術で普及しているとは言えない状態です。

Blazor WebAssembly

C# で WebAssembly を作るスタンダードな選択肢です。WebAssembly 自体が新しい技術でまだ普及しているとは言えない状態です。しかし WebAssembly を作るということであれば有力な選択肢になります。

Uno Pratform

C# でモバイルアプリやデスクトップアプリ、WebAssembly といったクロスプラットフォームアプリを作る選択肢です。まだ新しい技術であらゆる機能が十分に実装していると言える段階にはないため苦労をする場面も出てきます。しかし C# を扱うエンジニアからの評判がよく、非常に期待度の高い技術で、先を見据えた場合に有力な選択肢になります。

レガシー

現在は使われない古い技術です。
ずっと使い続けている古いアプリの改修の仕事など、関わる機会はゼロとは言えません。存在だけは知って置くとよいでしょう。

ASP.NET Web フォームアプリケーション

Web アプリを作ります。現在は使われない古い技術です。前述の Windows フォームアプリケーション よりその度合いは強く、現行の環境 (.NET/.NET Core) ではもう動作しません。

ASP.NET MVC アプリケーション

Web アプリを作ります。ASP.NET Web フォームアプリケーション と同様に現行の環境 (.NET/.NET Core) では動作しない技術です。前述の ASP.NET Web フォームアプリケーション よりは新しい技術で、.NET Framework 環境の場合は選択される技術です。

※ほかにも Web アプリを作る方法もありますが、C# としては印象が薄かったりします。このコンテンツは入門者向けということでここでは割愛します。

C# 2.0 以降の新機能の確認 - C# 8.0 - 非同期ストリーム

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

非同期ストリーム

 https://docs.microsoft.com/ja-jp/dotnet/csharp/tutorials/generate-consume-asynchronous-stream
 ストリームを非同期で扱える。

// async System.Collections.Generic.IAsyncEnumerable メソッド名() でメソッドを宣言する
async System.Collections.Generic.IAsyncEnumerable<int> GenerateSequence()
{
    for (int i = 0; i < 20; i++)
    {
        // メソッドの中で await できる
        await Task.Delay(1000);
        // メソッドの中では yield return する
        yield return i;
    }
}

// foreach に await を付ける
await foreach (var number in GenerateSequence())
{
    Console.WriteLine(number);
}

C# で作れるアプリ(デスクトップ)

作れるアプリ

C# では多彩な形式のアプリが作れます。ほぼ JavaScript が支配的な実行環境となる Web フロントエンドを除いてほぼなんでも作れます。Web フロントエンドについては Web Assembly という技術であれば C# でも作れますが、まだ仕事は少ないのが実情でこれからの技術です。

デスクトップ

Windows や Mac、Linux といったローカルマシン上で使うアプリです。ほかの形式のアプリよりも動きのあるアプリを手早く作れるためとりあえずのお試しにもオススメです。

コンソールアプリケーション

いわゆるコマンドを作ります。画面を持たず、主にコマンドプロプトやターミナルやターミナルで文字入力で実行し、結果の表示も文字によって行います。ファイルの操作は可能なので、ファイルを作って結果を書くなども可能です。

WPF アプリケーション

画面のある普通の Windows アプリを作ります。特別な理由がなければこの形式を選択します。Windows アプリを作る仕事としても最も多く選択される形式です。

UWP アプリケーション

画面のある Windows 10 のアプリを作ります。Windows のストアで配信できる形式のアプリです。HoloLens で動作するのもこの形式のアプリです。セキュリティのために前述の WPF に比べて PC 上のファイル操作に制約があるなど制限事項もあり、仕事としては WPF の方が機会が多くなります。

割愛

※Mac や Linux で画面を持ったアプリを作る方法もありますが、正直まだ仕事は少ないのが実情でこれからの技術です。このコンテンツは入門者向けということでここでは割愛します。

レガシー

現在は使われない古い技術です。
ずっと使い続けている古いアプリの改修の仕事など、関わる機会はゼロとは言えません。存在だけは知って置くとよいでしょう。

Windows フォームアプリケーション

画面のある普通の Windows アプリを作ります。現在は使われない古い技術です。特別な理由がなければ WPF アプリケーションが選択されるため出番は通常ありません。

C# 2.0 以降の新機能の確認 - C# 8.0 - Null 許容参照型

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

Null 許容参照型

 https://docs.microsoft.com/ja-jp/dotnet/csharp/nullable-references
 参照型を基本 null 非許容の扱いにできる。
 ※この機能を使うには明示的に機能を ON にする必要があります。

 参照型も基本 null 非許容の扱いになる。
 null を許容したい変数は ? を型の後ろに付けて宣言する。
 null 非許容の変数に null を入れようとすると警告になる。
 null 非許容の変数のメソッドなどを呼ぶと警告になる。

// null 非許容の変数に null を入れようとすると警告
string text1 = null;                // 警告 CS8600 Null リテラルまたは Null の可能性がある値を Null 非許容型に変換しています。

string? text2 = null;
// null 許容の変数をそのまま使うと警告
Console.WriteLine(text2.Length);    // 警告 CS8602 null 参照の可能性があるものの逆参照です。
// null 許容の変数を使うときは ? をつける
Console.WriteLine(text2?.Length);

// null 非許容でも文脈を見て、null と思われる場合は警告がでる
Console.WriteLine(text1.Length);    //  警告 CS8602 null 参照の可能性があるものの逆参照です。

// 文脈を見て null でないとわかると警告はでない
if (text1 != null) Console.WriteLine(text1.Length);
text1 = ""; Console.WriteLine(text1.Length);