C#プロジェクトの作成と.NET Framework

C#プログラミングの前提知識

C#言語の解説の前にVisual StudioでC#プロジェクトを作る方法を説明します。

Visual Studioを起動したら、「ファイル」→「新規作成」→「プロジェクト」を選択します。
プロジェクトの新規作成

新しいプロジェクトを作成するウィンドウが開くので、テンプレート一覧から「Visual C#」を選択し、プロジェクトの種類に「コンソールアプリケーション」を選択します。
新規C#プロジェクトの作成

この時、ウィンドウの上部に「.NET Framework ○.○」というドロップダウンボタンがあります。
ここではとりあえず「.NET Framework 4.6」を選択します。
(選択可能な最新のバージョンを選択してください)
保存場所や名前は自分が管理しやすいように適宜変更してください。

.NET Frameworkはメジャーアップデート(新機能の追加などの更新)は終了しました。
今から新しくアプリケーションを開発する場合は「.NET Framework」ではなく「.NET」を選択してください。
詳しくはページ後段で説明します。

.NET Frameworkとは

以下の説明は今までプログラミングに一切触れたことのない人にはチンプンカンプンな内容かもしれませんが、簡単に目を通しておいてください。

C言語やC++で作られたソフトウェアは、OS(CPU)が直接理解できる形のデータ形式になっています。
これをネイティブコードネイティブアプリケーションと言います。
多くのソフトウェアはネイティブアプリケーションです。

それに対してC#で作られたソフトウェアは.NET Framework(ドットネット フレームワーク)というソフトウェアの実行環境上で動作する形のデータ形式となります。
この状態のデータを中間コード(CILコード)と言います。

中間コードはOSではなく.NET Frameworkに対してあれこれ指示を出します。
.NET Frameworkはその指示を再解釈してからOSに指示を出します。

わざわざワンクッションを挟むのにはもちろん理由があります。
最大の特徴はプログラミング言語を選ばないことと実行環境を選ばないことです。

.NET Frameworkの中間コードは、C#以外のプログラミング言語でも作ることができます。
.NET対応言語はC#のほかに「Visual Basic .NET」や「C++/CLI」「F#」などがあり、これらのプログラミング言語を使用してもC#と同じ中間コードが生成されます。
つまりプログラミング言語ごとの違いを.NET Frameworkが吸収してくれるので、自分が慣れている、または書きやすい言語で開発ができます。

そして、.NET Frameworkが動作する環境であれば、中間コードを動作させることができます。
正確に言えば「.NET Framework」はWindows用の実行環境の名前で、他のOSも含めた動作環境は単に.NETといいます。
つまり各OS用の.NET動作環境があれば、OSを選ばずに共通の動作をさせることができます。

.NETアプリケーションはこのワンクッションがあるため、ネイティブアプリよりも実行速度が若干劣ります。
といっても一般的なソフトウェアでは問題となるほどの差はありません。

また、.NETは単にソフトウェアの実行環境だけでなく、膨大なライブラリが付属しています。
このライブラリは良く出来ていて、複雑な機能を簡単に実現することができます。
このライブラリはプログラミング言語が変わっても同じ感覚で使用できます。

.NET Frameworkのバージョン

.NET Frameworkもソフトウェアの一種で、数年ごとにバージョンアップしています。
基本的には過去のバージョン用に作られた.NETアプリは最新バージョンの.NET Frameworkでも動作しますが、例外もあります。
以下簡単にまとめましたので参考にしてください。
(参考: .NET Framework のバージョンおよび依存関係(Microsoft Docs)
ただし一部省略している)

.NETバージョン CLRバージョン インストール済みWindowsバージョン インストール可能Windowsバージョン
4.8.1 4 2023 年 10 月リリース (バージョン 22631)
2022 年 9 月リリース (バージョン 22621)
2021 年 10 月 11 日リリース (バージョン 22000)
10 November 2021 Update
10 May 2021 Update
10 October 2020 Update
4.8 4 2021 年 10 月 11 日リリース (バージョン 22000)
10 November 2021 Update
10 May 2021 Update
10 October 2020 Update
10 May 2020 Update
10 November 2019 Update
10 May 2019 Update
10 October 2018 Update (バージョン 1809)
10 April 2018 Update (バージョン 1803)
10 Fall Creators Update (バージョン 1709)
10 Creators Update (バージョン 1703)
10 Anniversary Update (バージョン 1607)
8.1
7
4.7.2 4 10 October 2018 Update(1809)
10 April 2018 Update(1803)
10 Fall Creators Update(1709)
10 Creators Update(1703)
10 Anniversary Update(1607)
8.1
7
4.7.1 4 10 Fall Creators Update(1709) 10 Creators Update(1703)
10 Anniversary Update(1607)
8.1
7
4.7 4 10 Creators Update(1703) 10 Anniversary Update(1607)
8.1
7
4.6.2 4 10 Anniversary Update(1607) 10 November Update(1511)
10
8.1
7
4.6.1 4 10 November Update(1511) 10
8.1
8
7
4.6 4 10 8.1
8
7
Vista
4.5.2 4   8.1
8
7
Vista
4.5.1 4 8.1 8
7
Vista
4.5 4 8 7
Vista
4 4 7 Vista
3.5 2.0 10
8.1*
8*
7
Vista
3.0 2.0 Vista  
2.0 2.0    
1.1 1.1    
1.0 1.0    

「インストール済みWindowsバージョン」は、追加のインストールなしにそのバージョンの.NET Frameworkを使用できます
ただし*印が付いているものはコントロールパネルで有効にする必要があります。

「インストール可能Windowsバージョン」は、後からインストールすることで使用できるようになります。

CLRバージョンという項目が共通する.NET Frameworkバージョン同士は互換性があります。
CLRバージョンとは中間コードの対応バージョンのようなもので、CLRバージョンが共通するものは最終的に出力される中間コードが共通します。
例えば.NET Frameworkバージョン4で作られたソフトは.NET Framework4.5がインストールされている環境でも動作します。

反対に、CLRバージョンが異なるもの同士は互換性がありません。
しかし.NET Frameworkは複数の(CLRバージョンが異なる)バージョンを同時にインストール可能です。
例えばWindows10には.NET Framework4.6と3.5のふたつが初めからインストールされていることが上図から分かります。
つまり複数の.NET Frameworkをインストールしておけば、ほとんどの.NETアプリは問題なく実行することができます。

作成したソフトウェアを配布する場合には.NET Frameworkのバージョンに注意が必要です。
自分はWindows 10を使用していても、ユーザーはWindows Vistaかもしれません。
その場合は.NET4用のアプリは動きませんから、対象の.NETバージョンを下げて開発するか、説明書等に最新の.NET Frameworkをインストールするように明記しておくなどの対応が必要です。

バージョン3.0以下の.NET Frameworkは現在はほとんど使用されていません。
Windows XPなどの古いOSにどうしても対応せざるを得ない場合などに用途が限定されます。
(ちなみにXPには.NET Framework4がインストール可能です)

Visual Studioのプロジェクト設定では基本的に最新の.NET Frameworkバージョンを選択すれば良いですが、.NET互換の実行環境用にあえて古いバージョンを選択せざるを得ない場合もあります。
例えばゲームエンジンのUnityは.NET互換の実行環境を持っていますが、対応バージョンは.NET Framework3.5相当です。
(Unity5の場合)
CLRバージョンが最新の.NET Frameworkとは異なるので、Unity用に開発をする場合はプロジェクトの設定で.NET Framework3.5を選択する必要があります。

基本的に新しいバージョンほど使用できる機能が増えるので、プログラミングがしやすくなります。
.NETのバージョンはプログラミング中に変更することもできますが、新しいバージョンから古いバージョンへの変更は一部の機能が使えなくなるため、コードの変更が必要になる場合があります。

特に.Net Framework3.5からはLINQという強力な機能が追加されていて、使い勝手が大幅に向上しています。
このサイトでは基本的に.Net Framework3.5以上を対象として説明します。

C#のバージョン

もうひとつ、C#のバージョンというものもあります。
ややこしいのですが、これは「コードの記述方法のバージョン」です。
これはVisual Studioのバージョンと考えても構いません。

C#3.0 Visual Studio 2008
Visual Studio 2010
C#4.0 Visual Studio 2010
C#5.0 Visual Studio 2012
Visual Studio 2013
C#6.0 Visual Studio 2015
C#7.0 Visual Studio 2017
C#7.1 Visual Studio 2017 version 15.3
C#7.2 Visual Studio 2017 version 15.5
C#7.3 Visual Studio 2017 version 15.7
C#8.0 Visual Studio 2019
C#9.0 Visual Studio 2019 version 16.8
C#10.0 Visual Studio 2022 version 17.0
C#11.0 Visual Studio 2022 version 17.4
C#12.0 Visual Studio 2022 version 17.8

C#のバージョンが上がると、同じ機能を実現するためのコードであっても別の書き方ができるようになっていたりします。
C#のバージョンが最新でも、対応.NET Frameworkのバージョンが低ければ(.NET2.0など)当然サポートされていない機能は使用できません。

当サイトでは基本的にC#6.0以上を対象にしています。
それ以前のバージョンを使用している場合は特に理由がない限り更新することをおすすめします。

簡単なサンプルコード

以下はVisual Studio 2015で「.NET Framerowk」用のコンソールアプリのプロジェクトを作成した場合です。
.NET6.0以降で「.NET」用のコンソールアプリプロジェクトを作成した場合についてはページ後段で説明します。

上記の通りプロジェクトの設定を終えたら「OK」ボタンを押してプロジェクトを作成します。
すると以下のような画面になります。
新規C#プロジェクトの作成直後画面

もしソースコードが表示されていない場合はソリュージョンエクスプローラーから「Program.cs」をダブルクリックしてください。
ソリュージョンエクスプローラーは画面の右端のボタン、または「表示」メニューから開くことができます。
ソリュージョンエクスプローラーからソースコードを開く

プロジェクトを作成すると自動的にソースコードが生成されます。
コードは以下のようになっています。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

先頭の「using~」の行数や表示されている文字列は、プロジェクトの作成時に選択した.NET Frameworkのバージョンによって異なります。
上のコードと異なっていたとしてもとりあえず問題はないので、そのままにしておいてください。

7行目の「ConsoleApplication1」の部分はプロジェクト名によって変わります。
プロジェクト名を初期状態から変更した場合は適宜読み替えてください。

これはC#で動く最低限のコードで、全く何もしないコードです。
プログラムは「開始」ボタン、またはF5キーで実行できます。
プログラムの実行ボタン

この状態で実行すると、Visual Studioが何か作業を開始し、一瞬黒いウィンドウ(コンソール画面)が表示されますがすぐに閉じてしまいます。
コンソールアプリケーションというのはプログラムを開始すると専用のウィンドウが表示され、プログラムが終了すると自動的にウィンドウが閉じられます。
(コンソールから起動しない場合)
このサンプルコードは本当に何もしないプログラムなので、起動した瞬間にプログラムが終了するため、一瞬でウィンドウが閉じられてしまいます。

そこで、コードを以下のように書き換えてみます。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("C#プログラミング");
            Console.ReadLine();
        }
    }
}

12行目と13行目の間に、2行追加しただけのコードです。
コードの意味は後に説明するので、今はとりあえず上記の通りにコードを打ち込んでください。

これを実行するとコンソール画面上に以下のように文字が表示されます。

C#プログラミング

この状態でキーボードのEnterキーを押下するとコンソール画面が閉じ、プログラムが終了します。

C#でのプログラミングは、基本的に「static void Main」と書かれている行に続く波括弧{}の中に動作を記述していきます。
それ以外の行は今は無視してください。
他の行にももちろん意味はありますが、今は考える必要はありません。

次のページからはC#言語の解説に移ります。

対象.NET Frameworkバージョンの変更

対象とする.NET Frameworkのバージョンを変更したい場合は「プロジェクト」メニューから「(アプリケーション名)のプロパティ」を選択します。
プログラムの実行ボタン

するとアプリケーションの設定が表示されるので、左側メニューから「アプリケーション」を選択し、「対象のフレームワーク」から目的のバージョンの.NET Frameworkを選択します。
プログラムの実行ボタン

変更すると確認ダイアログが表示されるので、「はい」をクリックすればバージョンが変更されます。
ダイアログにも書かれている通り、いったんプロジェクトが閉じられ、保存していないソースコード等は自動保存されるので、自動保存されたくない場合は適当に編集してから変更してください。
プログラムの実行ボタン

.NET5以降のプロジェクト作成について

.NET Frameworkはバージョン4.8を最後にメジャーアップデートが終了し、以降はバグフィックスのみが提供されます。
これの後継として「.NET」という新しい実行環境が提供されています。

.NETは、従来は「.NET Core」という名称で、Windows以外での.NET実行環境を提供するものでしたが、.NET5以降は名前から「Core」が外れ、.NET Frameworkと統合されました。
(.NET Core3.1の次のバージョンは.NET5.0。「.NET4.0」は.NET Frameworkとの統合にあたって.NET Framework4と紛らわしいため存在しない)

そのため、今後C#アプリケーションを開発する場合は「.NETプロジェクト」を作成します。
Visual Studio2022でのC#コンソールプロジェクト作成画面

.NET Frameworkと.NET(Core)は基本的な部分は同じですが、.NET Frameworkに存在する一部の機能が使用できない等の違いはあります。

.NET6以降のコンソールアプリのテンプレート

.NET6/C#10.0(Visual Studio 2022 version 17.0)以降、コンソールアプリケーションのプロジェクトを作成すると、最初に自動生成されるコード(テンプレート)は上記のサンプルコードとは大きく異なります。


// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

C#の文法についてはまだ詳しく説明していませんが、大ざっぱに言えばC#10.0以降は処理のメインとなる部分以外は省略できる機能が追加されています。
以下は先ほどテスト用に使用したコードです。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("C#プログラミング");
            Console.ReadLine();
        }
    }
}

上記コードは、.NET6以降では以下のように書いても動きます。


Console.WriteLine("C#プログラミング");
Console.ReadLine();

これは簡単にコードが書けて便利なのですが、学習段階からこの記法を使うと理解が難しくなる部分もでてきます。
そのため当サイトでは基本的にこの機能は使用せず、従来のコードを使用します。

プロジェクトの新規作成時に、作成の直前に「最上位レベルでのステートメントを使用しない」というチェックボックスがありるので、これをオンにします。
(画面はVisual Studioのバージョンにより異なる可能性があります)
最上位レベルでのステートメントを使用しないチェックボックスのオン

これで従来の形式でソースコードが自動生成されます。


namespace ConsoleApplication1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

このチェックボックスのオン/オフで何か機能が変更されるわけではないので、プロジェクト作成後に上記のサンプルコードをソースコードにコピーして貼り付けても良いです。

簡単なサンプルコードで説明したサンプルコードはVisual Studio 2015で自動生成されるコードです。
こちらはVisual Studio2022による自動生成コードです。
バージョンの違いによって自動生成コードの細部は異なりますが、動作は同じです。