1

TimeSpan には次のコンストラクタがあります。

public TimeSpan(int hours, int minutes, int seconds)
{
    this._ticks = TimeSpan.TimeToTicks(hours, minutes, seconds);
}
public TimeSpan(int days, int hours, int minutes, int seconds)
{
    this = new TimeSpan(days, hours, minutes, seconds, 0);
}
public TimeSpan(int days, int hours, int minutes, int seconds, int milliseconds)
{
    long num = ((long)days * 3600L * 24L + (long)hours * 3600L + (long)minutes * 60L + (long)seconds) * 1000L + (long)milliseconds;
    if (num > 922337203685477L || num < -922337203685477L)
    {
        throw new ArgumentOutOfRangeException(null, Environment.GetResourceString("Overflow_TimeSpanTooLong"));
    }
    this._ticks = num * 10000L;
}
internal static long TimeToTicks(int hour, int minute, int second)
{
    long num = (long)hour * 3600L + (long)minute * 60L + (long)second;
    if (num > 922337203685L || num < -922337203685L)
    {
        throw new ArgumentOutOfRangeException(null, Environment.GetResourceString("Overflow_TimeSpanTooLong"));
    }
    return num * 10000000L;
}

TimeToTicks は、最後のコンストラクターの単純化バージョンにすぎないと思います。

最初のものはなぜ使わないのthis = new TimeSpan(0, hours, minutes, seconds, 0);ですか?

4

4 に答える 4

1

実装固有のようです。Mono では、次の実装があります。

    public TimeSpan (long ticks)
    {
        _ticks = ticks;
    }


    public TimeSpan (int hours, int minutes, int seconds)
    {
        CalculateTicks (0, hours, minutes, seconds, 0, true, out _ticks);
    }


    public TimeSpan (int days, int hours, int minutes, int seconds)
    {
        CalculateTicks (days, hours, minutes, seconds, 0, true, out _ticks);
    }


    public TimeSpan (int days, int hours, int minutes, int seconds, int milliseconds)
    {
        CalculateTicks (days, hours, minutes, seconds, milliseconds, true, out _ticks);
    }
于 2013-08-19T02:38:07.917 に答える
0

これは重複を少なくして書くことができることに同意しますが、メソッドが完全に重複しているわけではありません。ミリ秒を受け入れるコンストラクターは、3 桁の精度を に追加し_ticksます。ミリ秒を持たない TimeSpans の場合TimeToTicksは、より効率的でおそらく十分です。TimeToTicksおそらく本当の疑問は、 (2 番目のコンストラクターが使用できたはずの) 日を受け入れるのオーバーロードがない理由です。

于 2013-08-19T02:40:05.793 に答える