Iterator の質量

オブジェクト指向言語は「手続きベタ書き」という "古典的" な世界の描像を「〜を記述するオブジェクト」と「そのオブジェクトに関する手続き」という描像で書き直す.物理学者が世界のありようを記述するための必然して新しい素粒子を導入するように,プログラマはしばしばソフトウェアを記述するための必然と信じて新たなオブジェクトクラスを導入する.
さてここでもう一度物理学の jargon を持ち出して,Iterator クラスの質量を以下のように定義してみることとしよう.

  • ある種の Iterator が質量を持つならば,その Iterator は有限の寿命を持つ.
  • ある種の Iterator が質量を持たないならば,その Iterator は寿命を持たない.

Iterator を持ち出すときはいつも,列挙という共鳴状態で「質量を獲得するかもしれない」Iterator が世界とどのような相互作用を行うかに注意を向ける必要があるだろう.さもなくばあなたの理論は正確な未来の記述能力を失う.

Q : C# 2.0 で yield を用いた Iterator の実装を考える.Iterator は「列挙前」「列挙中」「列挙後」という状態を持つとしたとき,状態が変化する瞬間に行うべき動作が C# 2.0 で記述可能であることを示せ.