なんか、イテレータブロックは別にstaticで宣言する必要もないらしいです。
ただ、「イテレータクラスを自動生成する」都合上、スコープはpublicじゃないとダメ、らしい?
実行時に依存性注入しているのかコンパイラがベタでコード生成しているかはわかりません。(フレームワーク側の実装を考慮する必要もありませんケド。)
abstract class DrowImageColorBarBase : DrawImageBase { /// <summary> /// カラーバーパターンの列挙からカラーバーを描画。 /// </summary> /// <param name="aimg">描画するカンバス</param> protected override void doDrowImage(Bitmap aimg) { // (略) } /// <summary> /// カラーバーのパターンを列挙するイテレータブロック /// </summary> /// <returns>IBarPattern</returns> abstract public IEnumerable<IBarPattern> BarPattern(); } class DrowImageSMPTEX : DrowImageColorBarBase { /// <summary> /// SMTPE形式に準じたカラーバーを表示するためのイテレータ。 /// 下段1/4はオリジナル /// </summary> override public IEnumerable<IBarPattern> BarPattern() { yield return new Bar7Color(); yield return new Bar7RevColor(); yield return new BarGrayColorMixed(); yield return new BarGrayGradation(); yield return new BarGrayFullGradation(); } }