GetType

GetTypeについて。

Console.WriteLine(typeof(object).GetMethod("ToString").IsVirtual);
Console.WriteLine(((object)1).ToString());
Console.WriteLine(typeof(object).GetMethod("GetType").IsVirtual);
Console.WriteLine(((object)1).GetType());

上記の出力はどうなるか?結果は以下の通り。

True
1
False
System.Int32

GetTypeは非仮想である。Objectのメソッドで非仮想なのは、これとMemberwiseCloneだ。
GetTypeは非仮想なのに、仮想のように振舞う。これは、クラスのオブジェクトが全て型へのポインタを持っているからである。GetTypeは、このポインタの値を(非仮想で)返すので非常に高速である。 Int32は、クラスではないが、GetTypeはObjectのメソッドなので、呼出すときにボクシングされる。
オブジェクトは、どうせvftblのポインタを持っているのだから、GetTypeを仮想にしてもよかったのにと思うのだが。(GetTypeの呼出しがちょっと遅くなるだけで、メモリ使用量は減る)


いろいろやっていると、忘れるのでメモしておこう。提案だけで受注してないのも混じっている。

  • 大規模データベースの最適配置(通信業)
  • 多重無線ネットワークの最適設計(電力業)
  • 移動体通信におけるチャネルの最適割当(通信業)
  • 地上デジタルTVにおけるチャンネルの最適割当(官公庁)
  • 専用船積付け支援システム設計開発(流通業)
  • 光ネットワーク網の最適パス設計(通信業)
  • ロジスティクス最適ネットワーク設計開発(製造業)
  • 3次元パッキング最適化システム開発(流通業)
  • 最適配送計画システム開発(独立行政法人)
  • 衛星通信最適リソース割当(通信業)
  • 最適ロットサイズ決定(製造業)
  • 最適板取決定(製造業)
  • 乗務員負荷平準化スケジューリング(輸送業)
  • 最適バッファ配置計画(製造業)
  • 安全在庫最適化(製造業)
  • 最適サイクルタイム計画(製造業)

シミュレーションもやっているので、通信業が一番多い。
「データベース」のは、国際学会で発表。多重無線は制約条件が厳しい。積付けシステムは、学会で賞をもらった。光ネットワーク網は、非線形混合整数計画問題に定式化して10ページぐらいになった。3次元パッキングのコンテナは、立方体以外にも数種類の形状あり。最適リソース割当は、大規模で出力ファイルはギガクラスだ。