続・C#のジェネリクスで型クラスを真似る
前回のコード(GitHub Gist)は、値を入れるValue<TImpl, T>
クラスが単なるDictionary<string, object>
のラッパーでしかなく、汚れ仕事を押し付けた形となっていた。
そこを何とかしようと思うと、今回のコード(GitHub Gist)みたいになる。
とはいえ、型クラスもどきの方は型引数TImpl
に実装クラスMaybe
を入れられるが、値クラスの方は型引数を使ったとしても実装クラスMaybe<T>
がジェネリックのため指定できない。(型引数を取る型引数が不可能、というのにやられているわけだ。)
なのでMaybe<T>
を引き回すことができない。型クラスもどきのメソッドを呼び出すたびにValue<Maybe, T>
にアップキャストされてしまうのだ。そこで仕方なく、明示的なダウンキャストでMaybe<T>
に戻さないといけなくなる。