VB6って不思議だなぁ ?常識は通用しない?

Visual Basic6エラーコーディングの本を読んでから、かなりエラー処理に関しては気を遣うようになりました。時間はかかりますが、かなりエラーに強い関数が作れている(ような気がします)。
VBってのはやっぱりVariantを使って組むPGなんだと思いました。

Variantとは.NETやJavaでいうObject型みたいなもので、中にはどんな値でも入れることが出来る型です。他の言語ではこういう何でもはいる型は、なるべく使わないようにと、言われているのが普通です。何が入っているかわかりづらいため事故が起きやすいというのが理由だと思います。.NETのHashtableなんかはObject型を入れるようになっていますが、今度はジェネリックとかいって型を指定できるようになるみたいです。
通常、VB6でもVariantはなるべく使うなと良く言われます。しかし、関数の引数に関しては「曖昧」だとされているVariantの方が、より厳密に型チェックを行うことが出来る場合があるのです。
例えば、
Public Sub Hoge(ByVal lngValue as Long)
Msgbox Cstr(lngValue)
End Sub
こんな関数があるとします。
こいつを
Call Hoge(1.23)
というように呼び出すと、表示されるダイアログボックスには「1」という数値が表示されます。
VB6の場合、1.23というDouble型の値を与えたとしても、勝手に型変換されて1になってしまうのです。もし、この関数がDLL化されていて、ソースを見ることが出来なければ利用者は混乱するでしょう。Longしか受け取らないならば、それ以外の数値が来たときは利用者に通知した方が良いと思いますが、既に関数に値が渡された時に型変換が行われるので、関数内ではチェックしようがありません。
しかし、これはVariantだと出来てしまうのです。
Public Sub Hoge(ByVal varValue as Variant)
If TypeName(varValue)<>"Long" then
MsgBox "Long型しか受け付けません!"
Exit Sub
EndIf
Msgbox Cstr(varValue)
End Sub
TypeName関数を使うとVariantの変数にどんな型の値が入っているかを確認できるので、これで厳密にチェックすることが出来るのです。残念ながらコンパイル時にチェックされるわけじゃないのですが、Variantを使わない場合もコンパイル時になんのおとがめもないのでその点は一緒です。
こんな風にVB6の場合、Variantは使っていいどころか、使わざる得ない(場合もある)のです。なかなか特殊な言語仕様なんですねぇ。
こんな感じで最近やっとVB6の最適解が見えてきましたよ。.NETをここまで理解するにはどれぐらいかかるかなぁ・・・