[ Home on 246net ]

C♯で開発

好むと好まざるとに関わらず、C♯言語を使った開発をすることになったときに調べたことを蓄積していくページです。

言語仕様

コーディング標準

実行環境

Windows 上でC♯言語は次の2つの実行環境のどちらかを使うことができます。相互に互換性はないので、開発時にどちらかを選択することになります。

.NET Frameworkは、従来からあるデスクトップアプリケーション用の実行環境です。ソースコードをコンパイルして生成した共通中間言語(CLI)を仮想実行システム(VES)で実行する構造です。

WinRTは、Windows 8から導入されたWindows ストアアプリケーション用の実行環境です。ネイティブコードや.NET、JavaScriptなど多種の言語環境から利用するためメタデータWinMDを介していますが、実体はCOMベースのライブラリがWinRTです。C♯からみるとWinRTも.NETのライブラリに見えますがCOMの持つ制約があります。C♯プログラムはCLR上で実行する点は.NET Frameworkと一緒ですが、.NET Frameworkのライブラリをフルに使えるわけではなく、Windowsストアアプリ用.NETライブラリ(サブセット)となります。

.NET Frameworkとアプリケーションのバージョン

.NET Frameworkは、最初のバージョン1.0から、1.1, 2.0, 3.0, 3.5, 4.0, 4.5と順次バージョンアップされています。

.NET Frameworkアプリケーションを実行するためには、原則開発したバージョンと同じ.NET Frameworkを必要とします。

ただし、バージョン2.0, 3.0, 3.5の間は同一CLRバージョンであり、新しいバージョンが古いバージョンを包含する形でリリースされているので、例えばバージョン3.5を入れると、内部には3.0, 2.0を含むことになり、別途バージョン3.0や2.0をインストールする必要はありません。

また、バージョン4.0と4.5については同時に両方をインストールすることができず、バージョン4.0がインストールされたマシンにバージョン4.5をインストールすると、4.0が上書きされて4.5となります。

アプリケーションのアセンブリ(EXE?)には、実行バージョンが明示的に指定されているので、.NET Framework 3.5で開発したアプリケーションを.NET Framework 4.5で実行することができません。.NET Framework 4.5で実行するためには、アプリケーションを4.5用に再ビルド(非互換があるので再試験も必要)するか、アプリケーション構成ファイルに対応バージョンを記載(<supportedRuntime>要素)する必要があります。ただし、記載しても非互換があれば実行できない(実行途中でエラー)となります。アプリケーション構成ファイルはインストールした後に編集するので、インストール時に.NET Framework3.5など古いバージョンを要求する場合は対応が困難です。

.NET Framework 32bit/64bit版とアプリケーションの32bit/64bit

アプリケーションのアセンブリには、CPUターゲットにx86(32bit), x64(64bit), AnyCPU(OSに応じて32bitか64bitか決まる)の3種類のいずれかが指定されています(本解説ではItaniumは除外)。

32bitが指定されていれば、OSが64bitであろうと32bit版の.NET Frameworkを使用します(なければエラー?)。

64bitが指定されていれば、64bit版の.NET Frameworkを使用します。

AnyCPUが指定されていれば、OSが32bitであれば32bit版の.NET Frameworkを、OSが64bitであれば64bit版の.NET Frameworkを使用します。

よって、どのOSでも確実に32bit版アプリを実行したい場合は、明示的にアセンブリのCPUターゲットを32bitにしておく必要があります。

.NET Frameworkのメモリ管理

.NET Frameworkライブラリ

GUIライブラリ

.NET Frameworkには、当初から搭載されているWindows.Forms GUIライブラリと、バージョン3.0から搭載されたWPF(Windows Presentation Foundation)の2つが割拠しています。

Windows.Formsは、Win32 APIのラッパーで、GDI+での描画を行います。一方、WPFは、DirectXの上で描画されます。DirectX上で描画することで、ベクターグラフィックスや3D、画像処理、動画、サウンドといった高機能を実現しています。

WPF: Windows Presentation Foundation

ロギング

.NET Frameworkには、標準では非力なログ機能しか搭載されていないので、通常は他のライブラリを使用することが多いでしょう。

System.DiagnosticsのDebugとTrace

デバッグビルド時に有効なDebug(正確にはDEBUGシンボルがビルド時に定義)、デバッグ/リリースビルドともに有効なTrace(正確にはTRACEシンボルがビルド時に定義)の2つのクラスでログを生成するものです。ログ機能としては極めて原始的で、またログ出力レベル(TraceSwitch)については中途半端な拡張のため、一貫性が崩れています。

System.Diagnostics.TraceSource

学習

開発環境

統合開発環境

Visual Studio

ビルドツール

MSBuild

書籍

C#は、言語仕様の変化が激しいので、書籍は注意しないと古いバージョンのものがあります。