2

C# の場合

次のものがあるとします。

public String whatHappens{ get; set; }

プロパティが初期化および設定されていると仮定します。

それからここで私は電話します

Console.WriteLine(whatHappens);

GET 呼び出しは文字列オブジェクトを返し、Console.WriteLine は ToString() を呼び出しますか、または GET 呼び出しは文字列クラス内で ToString() メソッドを呼び出し、文字列を返しますか。

これは学校の問題ではなく、同僚と私が話し合っている議論です。

4

1 に答える 1

7

あなたの例では、自動プロパティを使用しています。自動プロパティには、追加の非表示フィールドであるバッキング フィールドがあります。このフィールドはプロパティと同じタイプで、この場合は文字列です。

ToString()このプロパティ内では、バッキング フィールドが既に type であるため、コードは呼び出されませんstring

Console.WriteLine多くのオーバーロードがあります。これらのオーバーロードの 1 つは、 type のパラメーターを受け入れますstring。パラメータはすでにそのタイプであるため、内部Console.WriteLineで を呼び出す必要はありません。ToString()

要するに: NoToString()はどこにも呼び出されません。

一方、プロパティが自動プロパティではなく、その背後にあるフィールド (または複数のフィールド) が別の型である場合は、 を使用して文字列に変換する必要がありますToString()

一方、別のオーバーロードConsole.WriteLineが呼び出された場合、パラメーターの型が であるobject場合、ある時点でWriteLine呼び出す必要があります。ToString()

于 2013-05-01T19:01:45.917 に答える