1

以下は、「c#のキーでプログラミングする」という本の短い時計プログラムです。私はTimersライブラリにまったく精通していないので、この構文のいくつかは実際には得られません。私が理解したいのはConsole.Write(str)、この小さなプログラムのメソッドの行です。Mainコンソールに何を印刷するかをどうやって知るのですか?Console.WriteLine()毎秒時間を印刷するのは空の呼び出しですか?私がこれらの概念について読んでいるとき、何が起こっているのかを理解するのは事後に簡単に思えます。私が尋ねたことに基づいて、私がまだ本当に理解していないC#についてのことは何ですか?

using System;
using System.Timers;    // Requires System.dll

class Clock
{
    static int iStringLength;

    static void Main()
    {
        Console.WriteLine("Press Enter to end program");
        Console.WriteLine();

        Timer tmr = new Timer();
        tmr.Elapsed += new ElapsedEventHandler(TimerHandler);
        tmr.Interval = 1000;
        tmr.Start();

        Console.ReadLine();
        tmr.Stop();
    }
    static void TimerHandler(object obj, ElapsedEventArgs eea)
    {
        Console.Write(new String('\b', iStringLength));

        string str = String.Format("{0} {1} ", 
                                eea.SignalTime.ToLongDateString(), 
                                eea.SignalTime.ToLongTimeString());
        iStringLength = str.Length;

        Console.Write(str);
    }
}
4

3 に答える 3

3

Main()最初の空白行を除いて、コンソールには何も出力されません。

Console.Write()TimerHandler()コールバックでは毎秒実行され、時間を出力します。

于 2012-09-24T17:57:33.487 に答える
1

strString.Format()関数が呼び出された後の文字列の値が含まれます。その機能はここに文書化されています:http://msdn.microsoft.com/en-us/library/b1csw23d.aspx

コードでは、{0}はeea.SignalTime.ToLongDateString()のフォーマットされた表現に置き換えられ、{1}はeea.SignalTime.ToLongTimeString()のフォーマットされた表現に置き換えられます。

だから答える

私が理解したいのは理解したくないのですが、この小さなプログラムのメソッドのConsole.Write(str)という行です。Mainは、コンソールに何を印刷するかをどのように認識しますか?

答えは、「String.Format()関数が「str」の値がこの行にあると判断したものは何でも書き込みます:」です。

string str = String.Format("{0} {1} ",  
                                eea.SignalTime.ToLongDateString(),  
                                eea.SignalTime.ToLongTimeString()); 

WriteLine()関数は空の行を出力するだけで、実際には、要求した日付/時刻を示す文字列とは何の関係もありません。

記録のために、Console.WriteとConsole.Writelineは、それぞれここここに文書化されています。

于 2012-09-24T17:58:27.103 に答える
0

パラメータを指定しないConsole.WriteLine()は、空の行(改行)を出力するだけで、そのように聞こえます。

現在のラインターミネータを標準出力ストリームに書き込みます。

Console.WriteLine(xxx)に任意のパラメーターを指定すると、パラメーターが1行に出力され、その後に新しい行が続きます。

指定されたデータに続いて現在のラインターミネータを標準出力ストリームに書き込みます。

TimerHandlerメソッドでは、Console.Write(xxx)を使用しています。これは、改行なしでパラメーターのテキスト表現を出力するだけです。

指定されたオブジェクトのテキスト表現を標準出力ストリームに書き込みます。

于 2012-09-24T17:57:57.323 に答える