■56755 / inTopicNo.3) |
Re[1]: String.Formatについて |
□投稿者/ よねKEN (670回)-(2011/01/29(Sat) 12:51:45)
|
■No56753 (ひろふと さん) に返信 > いつもC#実装時の参考にさせていただいています。 > > String.Formatは複数のobjectを指定した文字列に変換するためによく利用していますが、少し気になった部分がありますので、質問させてください。 > > すでに文字列になっている変数を引数に指定した場合はどのような動作をするのでしょうか?
これに正確に答えるのは結構難しいと思います。 まず、String.Formatメソッドのオーバーロードで{0}などに対する引数を指定する部分は、 String型を引数に取るパターンはなく、Object型、または、Object型の配列を取ります。
つまり、String.Formatメソッドにとっては{0}などに対して渡される引数の型は何が来るかわからないので、 String.Formatメソッドの内部処理で、引数の型がStringであるかどうかをis演算子などで調べて特別な処理を行うような実装をしていない限りは、 ToStringメソッドなどの何等かの変換メソッドを通して処理されていると考えられます。
しかし、実際のところはString.Formatメソッドの実装を調べなければ正確なところはわかりません。 ソースもある程度公開されているので、興味があれば調べてみればよいかと思います。 <参考> http://social.msdn.microsoft.com/Forums/ja-JP/netfxgeneralja/thread/1c6baca3-dac0-45cb-95ed-8fd56848cb5f
> たとえば、 > string str1 = "aaaa"; > string str2 = string.format("{0}", str1); ←普通はこういった記述はしないですが、例として記述しています > といった場合ですが、この場合、すでにstringであるstr1はstringからstringに変換してstr2に設定されるのでしょうか? > それとも、すでにstringになっているので、stringへの変換はなく、そのままstr2に設定されるのでしょうか?
.NET Framework4のソースで見る限り、「string.format("{0}", str1);」の呼び出しに限って言えば、 str1のオブジェクトのToStringメソッドの呼び出し結果が使われます。 StringクラスのToStringメソッドは自分自身を返しているだけですが。
|
|