夜光序言:
红颜知己没找到,人华丽偶到处寻。不知何处才是头,放纵个性随处飘。
正文:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 案例1
{
//这里,我们解释一下运算符的重载
class Time
{
//定义两个私有的方法
int hour; //定义一个小时
int min; //定义一个分钟
public Time(int hour, int min) //传入的两个参数
{
this.hour = hour;
this.min = min;
}
/// <summary>
/// 不需要返回值,在当前时间基础上,增加t2时间
/// </summary>
/// <param name="t2">要增加的时间</param>
public Time Add(Time t2)
{
Time result = new Time(0, 0); //增加一个返回的时间之和
// 8:50 + 1:50 → 9:100 这样就不对了
// 我们之后再调整一下,调整成下面这种形式❤
result.hour = this.hour + t2.hour + (this.min + t2.min) / 60;
result.min = (this.min + t2.min) % 60;
return result;
}
/// <summary>
/// 针对+号,进行运算符的重构
/// </summary>
/// <returns></returns>
public static Time operator +(Time t1, Time t2)
{
Time result = new Time(0, 0);
result.hour = t1.hour + t2.hour + (t1.min + t2.min) / 60;
result.min = (t1.min + t2.min) % 60;
//最后再返回一个result
return result;
}
/// <summary>
/// 获取总的分钟数
/// </summary>
/// <returns></returns>
public int GetTotalMinutes()
{
return this.hour * 60 + this.min; //这样不就是总的分钟数了~~
}
/// <summary>
/// 针对大于运算的重载,布尔类型的判断
/// </summary>
/// <param name="t1"></param>
/// <param name="t2"></param>
/// <returns></returns>
public static bool operator >(Time t1, Time t2)
{
if (t1.GetTotalMinutes() > t2.GetTotalMinutes())
return true;
else
return false;
}
/// <summary>
/// 针对小于运算的重载,布尔类型的判断
/// </summary>
/// <param name="t1"></param>
/// <param name="t2"></param>
/// <returns></returns>
public static bool operator <(Time t1, Time t2)
{
if (t1.GetTotalMinutes() < t2.GetTotalMinutes())
return true;
else
return false;
}
/// <summary>
/// 小于等于,其实就是不大于
/// </summary>
/// <param name="t1"></param>
/// <param name="t2"></param>
/// <returns></returns>
public static bool operator <=(Time t1, Time t2)
{
return !(t1 > t2); // 返回一个为假,就是小于等于
}
public static bool operator >=(Time t1, Time t2)
{
return !(t1 < t2); // 返回一个为假,就是大于等于
}
/// <summary>
/// 相等
/// </summary>
/// <param name="t1"></param>
/// <param name="t2"></param>
/// <returns></returns>
public static bool operator ==(Time t1, Time t2)
{
/*return (t1.hour == t2.hour) && (t1.min == t2.min); //这样子的写法是可以的*/
return t1.GetTotalMinutes() == t2.GetTotalMinutes(); //这样子的写法和上面的写法本质上是一样的,表现形式不一样
}
/// <summary>
/// 不相等
/// </summary>
/// <param name="t1"></param>
/// <param name="t2"></param>
/// <returns></returns>
public static bool operator !=(Time t1, Time t2)
{
/*return (t1.hour == t2.hour) && (t1.min == t2.min); //这样子的写法是可以的*/
return !(t1 < t2); //这样子的写法和上面的写法本质上是一样的,表现形式不一样
}
/// <summary>
/// 写一个 tostring 方法
/// </summary>
/// <returns></returns>
public override string ToString()
{
return string.Format("{0,2},{1,2}", hour, min);
}
}
class Program
{
static void Main(string[] args)
{
Time t1 = new Time(8, 50);
Time t2 = new Time(1, 50);
Time x;
/* Console.WriteLine(t1);*/
/* Console.WriteLine(t1.hour, t1.min); //因为都是私有变量,所以我们不可以这么写*//*
Console.WriteLine(t1); // t1.tostring
Console.WriteLine(t2); // t2.tostring
x = t1 + t2; //因为传统的+运算符只可以适用于整型什么的,如果要满足当下的情况,我们需要对运算符进行重构
Console.WriteLine(x);*/
#region 比较时间的大小,夜光 输出时间较大者
Debug.Assert(t1 > t2); //断言(判断一句话是否为真)
Debug.Assert(!(t1 < t2)); //断言(判断一句话是否为真)
Debug.Assert(t1 >= t2); //断言(判断一句话是否为真)
Debug.Assert(!(t1 <= t2)); //断言(判断一句话是否为真)
Debug.Assert(!(t1 == t2)); //断言(判断一句话是否为真)
Debug.Assert(t1 != t2); //断言(判断一句话是否为真)
/*if(t1 > t2) // Time.operator > (t1,t2)
{
Console.WriteLine(t1);
}
else
{
Console.WriteLine(t2);
}*/
Console.WriteLine("测试完毕"); //如果可以看到这几个字,说明之前的断言都没有触发
#endregion
Console.ReadLine();
}
}
}