VB.NETの数値・文字列変換がTMTOWTDI過ぎる件

最近VB.NETを触る機会がありました。いろいろ忘れてるんで、ググりながらのプログラミングです。
 
で、単純なIntegerからStringへの変換ってどうだっけ、と検索してみたらこれがよく分からないんですよね。いや、その、検索結果はいろいろ出てくるんですよ。でも、なんだか、みんな言ってることがバラバラなんです。いったいどれが本当なんだろうか。
 
たとえば、次の整数numから文字列sへ変換するとして、

    Dim num As Integer = 1000
    Dim s As String

こんな変換方法があるようです。

    s = num                         ' => "1000"

あー、暗黙の変換か。短いスクリプト言語ならともかく、しっかり作りこむソフトではあんまり使いたくないな。

    s = Str(num)                    ' => " 1000"

お、大昔に何かで見たような変換関数。なるほど先頭に符号用のスペースがつくのか。

    s = CStr(num)                   ' => "1000"

なんだか似たようなのが出てきたぞ。そうそう、CIntとかCDateとかCからはじまる変換関数シリーズってあったね。

    s = CType(num, String)          ' => "1000"

と思ったら、今度はそれらを一般化した汎用変換関数か。意味あるのかな。

    s = Convert.ToString(num)       ' => "1000"

おいおい、さらにそれを汎用変換クラスにしたものまであったぞ。
あの、言いにくいんですが、もう目的は達したんでそろそろ勘弁してもらえませんか。

    s = num.ToString()              ' => "1000"

えーと、すごく…オブジェクト指向です…。なんとなくRubyとかそのへんっぽい。

    s = Format(num, "0")            ' => "1000"

あ、これ使ったことある。C言語でいうsprintfだよね。表示桁数を指定するときとか便利。

    s = String.Format("{0:D}", num) ' => "1000"

最後は文字列クラス版のFormat関数。書式指定方法が全然違うのはなぜなのだ。
ちなみに0は何番目の引数かを示して、DはデシマルのD。これもDの代わりに0による書式指定や、

    s = String.Format("{0:0}", num) ' => "1000"

書式を省略した{0}なんて書き方もできる。

    s = String.Format("{0}", num)   ' => "1000"

いやいや、もうおなかいっぱい。
 
なんというか長い長いBASIC言語の歴史を全部引きずってる感じ。過去のものを廃止したりせずに全部入りになってるのはVB.NETの寛容さなのか。PerlLarry Wallもびっくりの"There's More Than One Way To Do It."(TMTOWTDI)っぷりでした。