C# (CSharp) VersionSample.Csharp5 Namespace

Classes

Name Description
AsyncSample async/await は、原理的にはどんな型であも await 可能(awaitable)にできるんだけども、実際のところ、自作するのはかなり大変。 まず無理。 なので、素の状態では、C# 5.0 と同時期に出た .NET 4.5 以上でないと async/await を使えない。 ただし、.NET 4 上で await が使えるように、.NET 4.5 相当の System.Threading.Tasks.Task クラス機能や、IO 系クラスの非同期メソッドなどを .NET 4 向けにバックポーティングしたものを、Microsoft が公式に提供してる。 (NuGet パッケージとして参照可能。Microsoft.Bcl.Async。) これを使えば、.NET 4 以上であれば async/await を使える。
AsyncTaskSample ただ、Microsoft.Bcl.Async では、.NET 4.5 との差分のメンバーを拡張メソッドとかで定義してるんだけども、 静的メソッドの拡張はできないので、Task.Delay(int) みたいなやつは足せない。やむなく、TaskEx っていうクラスを作ってる。 このせいで、Task.Delay(int) とかを使うには、上記 //#if みたいなマネが必要。
CallerInfoSample これも Csharp3.ExtensionMethodSample 同様、同名の属性クラス(自作でもいい)さえあれば動く。 自作すれば、.NET 2.0 でも動く。
ForeachBreakingChangeSample C# には珍しい破壊的変更の1つ。 foreach (var x in ...) の、x のスコープが変わった。 これは、生成する IL が変更されたもので、単純に C# コンパイラーだけの問題。 ビルド時にどのコンパイラーを使ったかによって挙動が変わって、実行時にどの .NET ランタイムを使っているかにはよらない。 逆に言うと、.NET 4 移行を使っていたとしても、古いコンパイラーでビルドすると古い挙動になるので注意。