概要 Ver. 5.0 C# はこれまでも一貫して、「言語自体(コンパイラー)に多くのことをさせ過ぎない」、 「可能な限りフレームワーク側(クラス ライブラリ側)に実装を任せる」という方針で機能追加を行っています。 例えば、foreach や LINQ の実装がその例ですが、以下のように、コンパイラーの仕事はメソッド呼び出しへの変換になります。 「foreach」は、enumrable/enumerator パターンに沿って実装されたクラスなら何でも列挙可能。 単純に、GetEnumerator メソッドや MoveNext, Current などの呼び出しに置き換えられる。 LINQ「クエリ式」は、Select や Where という名前のメソッドを持っていれば何でも問い合わせ可能。 非同期メソッドも同様の方針を取っていて、 本項で説明するようなパターンに沿ったクラスなら、なんでも aw