1

私はC#プログラミングに非常に慣れていないので、C ++とHTMLのバックラウンドが軽いので、ほとんどゼロから始めています。私はmsdnチュートリアル、具体的にはプロパティチュートリアルを調べていましたが、今のところ理解できない部分は1つだけです。コードには次のような部分があります。

// person.cs

using System;

class Person
{

private string myName ="N/A";

private int myAge = 0;

// Declare a Name property of type string:
public string Name
{
    get 
    {
       return myName; 
    }
    set 
    {
       myName = value; 
    }
}

// Declare an Age property of type int:
public int Age
{
    get 
    { 
       return myAge; 
    }
    set 
    { 
       myAge = value; 
    }
}

public override string ToString()
{
    return "Name = " + Name + ", Age = " + Age;
}

public static void Main()
{
    Console.WriteLine("Simple Properties");

    // Create a new Person object:
    Person person = new Person();

    // Print out the name and the age associated with the person:
    Console.WriteLine("Person details - {0}", person);

    // Set some values on the person object:
    person.Name = "Joe";
    person.Age = 99;
    Console.WriteLine("Person details - {0}", person);

    // Increment the Age property:
    person.Age += 1;
    Console.WriteLine("Person details - {0}", person);
}
}

プログラムの出力は次のとおりです。

Simple Properties
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100

これで、{0}は事実上、コードの一部(この場合は「人」)を参照するプレースホルダーであることがわかりましたが、この部分がどのようになっているのかわかりません。

public override string ToString()
{
    return "Name = " + Name + ", Age = " + Age;
}

「人」の下にリストされています。「名前」や「年齢」のようにつながりが見えません。誰かが接続を確立するコードの部分を強調表示し、質問することがあまりない場合はそれについても説明できますか?事前にどうもありがとうございました。

4

3 に答える 3

2

.Net の文字列フォーマット サービス ( {0}.

.Net は、ToString()渡されたすべてのオブジェクトでメソッドを呼び出して、文字列に変換します。(すでに文字列の場合は、string.ToString()それ自体が返されます) クラスでメソッド
をオーバーライドしたため、システムによって呼び出されます。ToString()

于 2012-09-02T01:53:53.647 に答える
1

文字列フォーマットを使用しています。にはWriteLine、最初のパラメーターがフォーマット文字列であるオーバーロードがあるため、次のように同じことを行っています。

Console.WriteLine(String.Format("Person details - {0}", person));

このFormatメソッドは、値パラメーターを受け取り、それらを文字列に変換してから、フォーマット文字列に挿入します。何かを文字列に変換するための標準的な方法はToString、すべてのオブジェクトが持っているメソッドを呼び出すことです。文字列に変換されたときの外観を指定する場合は、ToStringメソッドをオーバーライドします。

したがって、最終的にコードは次のようになります。

Console.WriteLine("Person details - " + person.ToString());
于 2012-09-02T01:59:58.870 に答える
-1

これはあなたの質問に対する厳密な回答ではありませんToString()。あなたは C# が初めてだと言ったので、ここに追加しました。

文字列をフォーマットする方法を使用しないことをお勧め{0}します。これは、物事を行うのに非常に遅い方法であり、printf(). 実行する方がはるかに高速です

Console.WriteLine ( "Age: " + Age.ToString() );

などを使用する場合{0}Format()関数 (およびこの入力スタイルを受け入れるそのバリアント) は、最初に出力を解析してさまざまな書式設定オプションを検出し、さらにさまざまな文字列を連結する必要があります。

{0}(私の意見では、書式文字列に 5 ~ 6 個の入力パラメーターがある場合、文字列に続くパラメーター リストで一致する入力パラメーターを見つけるのが難しいため、書式スタイルを読み取るのもはるかに困難です。これは単なる個人的な好みです。ただし、この点を証明する例を次に示します):

Console.WriteLine ( "Details: 1.Age: {0}\n2.First Name: {1}\n3.Last Name: {2}\n",
    FirstName, LastName, Age );

エラーを見つけることができますか?これは 3 つのパラメーターを使用するだけです。5 ~ 6 を使用すると (製品コードでは非常に一般的です)、この種の書式設定を読み取るのは困難です。繰り返しますが、これは個人的な好みです。

于 2012-09-02T02:02:51.597 に答える