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

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

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

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

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

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

.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が動作する環境さえあれば中間コードをプログラムとして実行可能です。
つまりOSを選ばないということです。
厳密には.NET FrameworkはWindows上でしか動作せず、他のOSでは.NET Frameworkと互換のある実行環境を使用します。
(ややこしいのでWindows以外の実行環境も含むこと意味する場合はこれ以降「.NET」と記述します)

.NET Frameworkが登場したころはほぼWindows専用でしたが、現在ではMacやlinux用の.NET実行環境が存在します。
スマホのアプリもWindow用ソフトを作るのとあまり変わらない感覚でC#で作ることができます。
(ただしWindows用に作ったものをそのままMacで実行できる、というほど単純なものではありません)

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

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

.NET Frameworkのバージョン

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

.NETバージョン CLRバージョン インストール済みWindowsバージョン インストール可能Windowsバージョン
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バージョンならばそのまま使用できます
ただし*印が付いているものはコントロールパネルで有効にする必要があります。

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

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

簡単なサンプルコード

上記の通りプロジェクトの設定を終えたら「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を選択します。
プログラムの実行ボタン

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