C#面向对象编程2

代码重构
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");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值