代码重构
C#语言提供了较好的封装手段,在访问对象状态时提供了属性语法,这样可以更好地控制各种行为,即便在代码重构时内部实现改变了,也不影响其使用。
现在,要求修改上一题中的Time类的内部实现,只存储从午夜0时至今的“秒”值,其它所有public的对外公开的接口都不能变。上一题中的测试代码要求能运行,且输出结果不变。(具体参照https://blog.csdn.net/zrx0123/article/details/115939264)
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp9
{
public class Time
{
private int second;
public int Second
{
get { return second; }
set
{
second = value;
}
}
public Time(int h=0, int m=0, int s=0)
{
Second = s + m * 60 + h * 3600;
}
public Time() : this(0, 0, 0) { }
public Time(Time t) : this(t.second / 3600 % 24, t.second / 60 % 60, t.second%60) { }
//在现有时间上加上参数指定时间段后,返回新的时间信息;
public Time Next(int h, int m, int s)
{
int sum = this.second + s + m * 60 + h * 3600;
h = sum / 3600 % 24;
m = (sum / 60) % 60;
s = sum % 60;
return new Time(h, m, s);
}
//输出24时制的时分秒信息
public string ToUniversalString()
{
return (this.second / 3600 % 24).ToString() + ":" + (this.second / 60 % 60).ToString() + ":" + (this.second % 60).ToString();
}
//输出12时制的时间信息,并添加AM和PM后缀
public override string ToString()
{
int sum = this.second;
int h = sum / 3600 % 24;
int m = (sum / 60) % 60;
int s = sum % 60;
if (h > 12)
{
return (h - 12).ToString() + ":" + m.ToString() + ":" + s.ToString() + "PM";
}
else
{
if (h == 0)
return (h + 12).ToString() + ":" + m.ToString() + ":" + s.ToString() + "AM";
else
return h.ToString() + ":" + m.ToString() + ":" + s.ToString() + "AM";
}
}
static void Main(string[] args)
{
var t1 = new Time();
var t2 = new Time(2);
var t3 = new Time(21, 34);
var t4 = new Time(12, 25, 42);
var t5 = new Time(t4);
t5.Second += 3600 * 3;
var t6 = t5.Next(10, 40, 0);
Console.WriteLine("t1:");
Console.WriteLine($"{t1.ToUniversalString()}");
Console.WriteLine($"{t1.ToString()}\n");
Console.WriteLine("t2:");
Console.WriteLine($"{t2.ToUniversalString()}");
Console.WriteLine($"{t2.ToString()}\n");
Console.WriteLine("t3:");
Console.WriteLine($"{t3.ToUniversalString()}");
Console.WriteLine($"{t3.ToString()}\n");
Console.WriteLine("t4:");
Console.WriteLine($"{t4.ToUniversalString()}");
Console.WriteLine($"{t4.ToString()}\n");
Console.WriteLine("t5:");
Console.WriteLine($"{t5.ToUniversalString()}");
Console.WriteLine($"{t5.ToString()}\n");
Console.WriteLine("t6:");
Console.WriteLine($"{t6.ToUniversalString()}");
Console.WriteLine($"{t6.ToString()}\n");
}
}
}