さすが師走です。私は師ではありませんが、中間試験が終わったというのにABにかけられる時間が以前の水準まで戻りません。

ところで私、どうでもいいことですがなんとなくオーバーロードよりも多重定義と書くほうが好きです。今日はその多重定義の話です。

Graphicsクラスを書いていて、その多重定義が多いなと思ってました。たとえば数値が絡む場合、整数 (Long)か実数 (Single)かで少なくとも2つの多重定義がなされます。座標値を取る場合、x, yの2つ引数を取るものとPoint(F)を取るものので多重定義の数は2倍になります。Rectangle/Sizeが関係してくる場合も同様に2倍になります。

その極みがDrawImageEnumarateMetafileです。あまりの数の多さに、初めてクラスとは別にメソッドのページを作りました(まだ説明を付けていませんが)。DrawImageは、なんと28個の多重定義があります。EnumMetafileはまだ数えていませんし、まだ増える可能性があります。現在のEnumerateMetafileはネイティブC++版のGraphicsクラスを基にしていますが、ネイティブC++版になく、.NET Frameworkのみに存在する多重定義があればそれを追加するためです(DrawImageでは、それを行った結果6個追加されました)。もう少しすっきりまとめてほしいところです。

その2つは、ABの隠し機能である引数の省略を使えばもう少し数を減らせます。DrawImageでは使用しませんでしたが、これだけ多いとこの先使用することも考えてしまいます。ところで引数の省略はどうなのでしょう。もし存在させるとしたら、これは一般化して省略時の値を指定できるデフォルト引数(既定引数)まで欲しいと考えるところなのでしょうか。正式な仕様になってもらえるのであれば、私は現状の仕様でも十分満足します。

そんなことを考えつつ、ネイティブC++版になく.NET Framework版にのみ存在する多重定義がないかの確認を行っています。それが終わったら、Graphicsは完了です。次はControlに手を付けたいと思います。.NET FrameworkではSystem.Windows.Formsにあるあれです。この話はまた次回にでも。


スポンサード リンク

この記事のカテゴリ

  • ⇒ 多重定義
  • ⇒ 多重定義