C#8.0 の本質主義 第 1 章 – C# の概要
友人に勧められた C# の本 - C# Essentials、英語ではEssential C#と呼ばれ、公式 Web サイト https://essentialcsharp.com/home で英語版を無料で読むことができます。
C# は、モバイル デバイス、ゲーム コンソール、Web アプリケーションなどをサポートする、さまざまなシステム プラットフォーム用のアプリケーション ソフトウェアとプログラム コンポーネントを開発できます。
1.1ハローワールド
これは VSCode で記述し、dotnet コマンドを使用してコンパイルできます。VSでも書けます。
.NET Core のすべてのアセンブリは .dll 拡張子を使用します。
1.2 C# 構文の基本
PascalCase と CamelCase (大きなキャメル ケースと小さなキャメル ケースを含む) を含む C# キーワードと識別子規則を導入しました。クラス名と関数名には大きなキャメル ケースを使用し、ローカル変数名には小さなキャメル ケースを使用します。
@ プレフィックスを付加したキーワードを識別子として使用できます。
C# では、Main メソッドがパラメータを指定しないか、文字列配列を受信して void または int を返す必要があります。Main は、プログラムの実行が成功したかどうかを識別するステータス コードを返します。0 以外を返す場合は、通常、エラーを意味します。
C# では、ステートメントを複数行にまたがることができます。
1.3 変数の使用
char は、他の言語とは異なり、16 ビット長の文字型であり、サロゲートなしで Unicode 文字を表すのに十分です。
ローカル変数は、宣言後、読み取られる前に値を割り当てる必要があります。演算としての代入は値を返すため、C# では同じステートメント内で複数の代入演算を行うことができます。
すべての文字列型データは不変です。
1.4 コンソールの入出力
System.Console.Read() メソッドは、読み取られた文字値に対応する整数を返します。使用できる文字がそれ以上ない場合は、-1 を返します。実際の文字を取得するには、整数を文字に変換する必要があります。
C# 2.0 では、ユーザーの単語キー入力を返す ReadKey() メソッドが追加されています。
C# 6.0 より前では、出力形式の定義に複合書式設定が使用されていましたが、C# 6.0 以降では、文字列補間機能が導入され始めました。
//复合格式化
System.Console.WriteLine("your name is {0} {1}",firstname,lastname);
//字符串插值
System.Console.WriteLine($"your name is {firstname} {lastname}");
プレースホルダーは任意の順序で表示でき、複数回使用できます。プレースホルダーは省略することもできます。
1.5 管理された実行と CLI
アセンブリは共通中間言語( CIL ) を使用します。C# コンパイラーは C# ソース コード ファイルを中間言語に変換し、VES (仮想実行システム、ランタイムとも呼ばれる) が必要に応じて CIL コードをコンパイルし、プロセッサが理解できるマシン コードに変換します。このプロセスは単に-インタイム コンパイルまたはJIT コンパイル(ジャストインタイム コンパイル)。コードが「ランタイム」などの「エージェント」のコンテキストで実行される場合、それはマネージ コードと呼ばれます。実行時に「ランタイム」を必要としないコードは、ネイティブ コードまたはアンマネージ コードと呼ばれます。
ILDASM を使用してアセンブリを逆アセンブルし、C# コンパイラによって生成された CIL を抽出できます。一部の難読化ツールは、他人がソース コードを入手する可能性を減らすために使用できます。CIL を C# に逆コンパイルするツールは数多くあります。
1.6 複数の .NET フレームワーク
この本では、.NET Core が .NET の未来であると述べられています。ただし、vs2022 には .NET Framework しかありません。