本文へスキップ
totonoe.tech

プログラミング言語を整える

初級

C# を整える。

= 業務アプリや Unity で使われる C# を、同じお題で読んで学ぶ

C# が初めての方は、先に そもそも C# とは・どんな場面で使うか をどうぞ。

C#とは

Microsoft が .NET とともに作った静的型付けの言語で、Windows の業務アプリ・Web システム・Unity のゲーム開発で使われています。

誕生 2000年(発表)
作った人・組織 Microsoft(設計の中心は Anders Hejlsberg)
型の付け方 静的型付け
動かし方 .NET の中間言語(IL)にコンパイルし、.NET のランタイムが実行時に機械語へ変換して動かす
ファイルの拡張子 .cs
手元で動かすには dotnet new console -o hello && cd hello && dotnet run

日本での使われ方

  • Windows フォームや WPF を使った、社内向けの業務アプリの開発で使われています。
  • ASP.NET を使った .NET の Web システム(社内システムや業務向けサービス)の開発で使われています。
  • ゲームエンジンの Unity でスクリプトを書く言語が C# のため、ゲーム開発の現場で使われています。
  • 開発には Microsoft の Visual Studio を使うことが多く、Windows を中心にした開発の現場でよく見かけます。

新人研修での位置づけ

Windows 向けの業務システムを扱う会社では、新人研修で C# と Visual Studio を使って画面のあるアプリやデータベースにつなぐ処理を学ぶことがあります。ゲーム会社では、Unity を使う前提で C# の基本を学ぶ研修が組まれることがあります。

関わる資格・試験

  • Microsoft 認定資格(現在は Azure 開発者などの役割別の資格で、C# だけを対象にした試験はありません)
  • Foundational C# with Microsoft(freeCodeCamp と Microsoft が提供する無料の認定)
  • Unity Certified User: Programmer(Unity の認定。スクリプトは C# で書きます)

そもそも C# とは

Microsoft の .NET とともに育った、Windows の業務アプリからゲームまで使える言語。

C#(シーシャープ)は、2000年に Microsoft が発表した言語で、設計の中心は Anders Hejlsberg です。書いたコードは .NET の中間言語(IL)にコンパイルされ、実行時に .NET のランタイムが機械語へ変換して動かします。

型を指定する静的型付けのオブジェクト指向言語で、Java とよく似た書き方をします。Windows の画面を持つアプリや Web システムなど、Microsoft の開発環境と組み合わせて使われてきました。

どこで・どんな場面で使うか

  • Windows の業務アプリ

    Windows フォームや WPF を使った、社内向けの業務アプリの開発で使われています。

  • .NET の Web システム

    ASP.NET を使った、社内システムや業務向けサービスの開発に使われています。

  • Unity のゲーム開発

    ゲームエンジン Unity でスクリプトを書く言語が C# のため、ゲーム開発の現場で使われます。

  • Microsoft 製品との連携

    Microsoft の開発ツールやクラウドと合わせて使う開発で選ばれることがあります。

  • 求人での位置づけ

    「.NET」や「C#」を条件にした開発職の求人があります。Windows 環境の業務システムを扱う会社で多く見られます。

向いている場面・向いていない場面

  • 向いている:Windows や Microsoft の環境で動く業務アプリ。開発ツールが充実していて、画面付きのアプリを作りやすいです。
  • 向いている:Unity でゲームを作りたいとき。Unity のスクリプトは C# で書くので、ゲーム開発の入口になります。
  • 向いていない:ごく小さな機器の制御。メモリの少ないマイコンのような環境は、C 言語のほうが向いています。

下のお題やクイズで、Java と見比べながら C# の書き方を確かめてみてください。

5つのお題をC#で書く

C・C++・Java・C#・COBOL・VBA の6ページで、同じ5つのお題を同じ順に並べています。言語を切り替えると、書き方の違いがそのまま比べられます。

このページではコードを実行できません。表示している出力とエラーのメッセージは、.NET SDK 8.0.132 で実際にコンパイル・実行して、一字一句同じになることを確かめたものです。

コード(.cs)

Console.WriteLine("Hello, World!");

実行すると

Hello, World!

.NET 6 以降はトップレベルステートメントが使えるため、クラスや Main メソッドを書かずに1行で動きます。using System; も ImplicitUsings の設定で自動的に入ります。

同じお題をほかの言語で: C言語・C++・Java・COBOL・VBA

出力当てクイズ

コードを読んで、画面に出るものを選んでください。選ぶと正解と理由が出ます(答えはどこにも送られず、記録もしません)。

問1

var x = 7 / 2;
Console.WriteLine(x);

画面に出るのは?

問2

int a = 2;
int b = 3;
Console.WriteLine($"{a}+{b}={a + b}");

画面に出るのは?

問3

var p1 = new Point { X = 1 };
var p2 = p1;
p2.X = 2;
Console.WriteLine($"{p1.X} {p2.X}");

struct Point
{
    public int X;
}

画面に出るのは?

問4

string? name = null;
Console.WriteLine(name ?? "名無し");

画面に出るのは?

よくあるエラーと直し方

初めて書く人が出会いやすいエラーです。メッセージは英語のまま出ることが多いので、どの言葉を手がかりにすればよいかもあわせて載せています。

コンパイル時 セミコロンの付け忘れ(CS1002)

エラーになるコード

Console.WriteLine("1行目")
Console.WriteLine("2行目");

画面に出るメッセージ(抜粋)

error CS1002: ; expected

何が起きているか:C# では文の終わりに「;」が必要です。1行目の Console.WriteLine("1行目") の末尾に「;」が無いため、コンパイラが文の区切りを見つけられずに止まります。

直し方:エラーに表示された行番号の文の末尾に「;」を付けます。

コンパイル時 宣言していない変数を使う(CS0103)

エラーになるコード

int count = 3;
Console.WriteLine(cnt);

画面に出るメッセージ(抜粋)

error CS0103: The name 'cnt' does not exist in the current context

何が起きているか:宣言されていない名前 cnt を使っているため、コンパイラが何を指すのか分からずに止まります。打ち間違いや、宣言した場所(スコープ)の外で使っていることがよくある原因です。

直し方:変数名のつづりを宣言と合わせるか、使う前に変数を宣言します。

実行時 NullReferenceException

エラーになるコード

string? text = null;
Console.WriteLine(text.Length);

画面に出るメッセージ(抜粋)

System.NullReferenceException: Object reference not set to an instance of an object.

何が起きているか:中身が null の変数に対して .Length のようにメンバーを使おうとしたため、実行中に例外が発生して止まります。Nullable が有効なプロジェクトでは、コンパイル時に警告(CS8602)も出ます。

直し方:使う前に null でないか確かめるか、text?.Length や ?? 演算子で null のときの値を決めておきます。

実行時 IndexOutOfRangeException

エラーになるコード

int[] nums = new int[3];
Console.WriteLine(nums[3]);

画面に出るメッセージ(抜粋)

System.IndexOutOfRangeException: Index was outside the bounds of the array.

何が起きているか:要素が3つの配列で使える番号は 0〜2 です。nums[3] は範囲の外なので、実行中に例外が発生して止まります。

直し方:番号が 0 から nums.Length - 1 の範囲に収まっているか確かめます。全部の要素を順に扱うときは foreach を使うと範囲外になりません。

ほかの言語の解説

  • C言語 1972年・静的型付け
  • C++ 1983年(1979年に「C with Classes」として開発が始まりました)・静的型付け
  • Java 1995年・静的型付け
  • COBOL 1959年・静的型付け(PIC 句で桁数と種類を宣言する)
  • VBA 1993年(Excel 5.0 に搭載)・型を宣言しなくても動きます(Variant 型になる)。Option Explicit を書くと変数の宣言を強制できます

6言語の並べての比較は プログラミング言語を整える にあります。 書いたコードはどこにも送られません(このページに入力欄はクイズの選択だけで、選んだ答えも記録しません)。

このツールについて

Microsoft が .NET とともに作った静的型付けの言語で、Windows の業務アプリ・Web システム・Unity のゲーム開発で使われています。

C# の概要と、同じ5つのお題・出力当てクイズ・よくあるエラー(CS1002 など)。出力は .NET 8 で確かめたもの。

主な機能

  • 概要(誕生・作った人・型・動かし方)と日本での使われ方・新人研修・資格
  • 5つのお題のコード例(C・C++・Java・COBOL・VBA の同じお題へ移れる)
  • 出力当てクイズ4問(構造体のコピー・?? 演算子など)
  • よくあるエラー4件(コンパイラ・実行時の実際のメッセージ・原因・直し方)
  • 出力は .NET SDK 8 で照合済み・送信ゼロ

よくある質問

Q. このページで C# のコードを実行できますか?

A. できません。解説だけのページです。表示している出力とエラーのメッセージは、.NET SDK 8.0.132 で実際にビルド・実行して確かめたものです。

Q. コードに class や Main が無いのはなぜですか?

A. C# 9 から使える「トップレベルステートメント」で書いているためです。.NET 6 以降の dotnet new console が作る雛形もこの書き方です。

Q. C# は日本ではどこで使われていますか?

A. Windows の業務アプリ(Windows フォーム・WPF)、ASP.NET の Web システム、Unity のゲーム開発などです。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

データの時点:各ページに記載の版(各プロジェクトの公式リリース)

データの更新予定の一覧

運営サイト

私たちが運営するサイト