C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: String.Formatについて


(過去ログ 95 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■56753 / inTopicNo.1)  String.Formatについて
  
□投稿者/ ひろふと (1回)-(2011/01/29(Sat) 11:30:12)

分類:[C#] 

いつもC#実装時の参考にさせていただいています。

String.Formatは複数のobjectを指定した文字列に変換するためによく利用していますが、少し気になった部分がありますので、質問させてください。

すでに文字列になっている変数を引数に指定した場合はどのような動作をするのでしょうか?

たとえば、
string str1 = "aaaa";
string str2 = string.format("{0}", str1); ←普通はこういった記述はしないですが、例として記述しています
といった場合ですが、この場合、すでにstringであるstr1はstringからstringに変換してstr2に設定されるのでしょうか?
それとも、すでにstringになっているので、stringへの変換はなく、そのままstr2に設定されるのでしょうか?

いろいろググってみたのですが、自分の検索の仕方が足りないのか、いい回答が見つかりませんでした。

もしよければ教えてもらえないでしょうか?

よろしくお願いします。
引用返信 編集キー/
■56754 / inTopicNo.2)  Re[1]: String.Formatについて
□投稿者/ じゃんぬねっと (27回)-(2011/01/29(Sat) 12:50:44)
じゃんぬねっと さんの Web サイト
No56753 (ひろふと さん) に返信
> といった場合ですが、この場合、すでにstringであるstr1はstringからstringに変換してstr2に設定されるのでしょうか?

str1 は string なのですから string から string に変換って言う言い回しは微妙ですね...
System.String クラスは文字列が不変であるそうなので、元の str1 は不変なのは確かです。
そうなると新しいインスタンスを作って埋め込みをしているのだと思われます。
(そもそも String.Format メソッドで返される String は別の物ですし...)

意味のない ToString メソッドを呼んでいるかどうかまではわかりませんが...

# 中の実装を見ちゃうか IL 解析すればわかるかも...
引用返信 編集キー/
■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メソッドは自分自身を返しているだけですが。

引用返信 編集キー/
■56761 / inTopicNo.4)  Re[2]: String.Formatについて
□投稿者/ ひろふと (2回)-(2011/01/30(Sun) 11:01:53)
じゃんぬねっと様、よねKEN様、回答ありがとうございます。

教えていただいたソースについてダウンロードして解析してみます。

現段階では、解決はしていませんが、解決の糸口を教えていただいたということで解決済みにチェックを付けさせていただきます。


本当にありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -