using System;
public class Rect
{
public Rect()
{
//
// TODO: Add constructor logic here
//
}
/*
* 功能
* 设置当前矩形的四个坐标值
* 参数
* left in 左坐标
* top in 上坐标
* right in 右坐标
* bottom in 底坐标
*/
public void Set(int left, int top, int right, int bottom)
{
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
}
/*
* 功能
* 矩形相加
* 参数
* lhs in 第一个矩形
* rhs in 第二个矩形
* 返回值
* 两个矩形相加后的矩形
*/
public static Rect operator + ( Rect lhs,Rect rhs)
{
Console.WriteLine("operator + be called");
Rect rt = new Rect();
rt.top = lhs.top + rhs.top;
rt.left = lhs.left + rhs.left;
rt.bottom = lhs.bottom + rhs.bottom;
rt.right = lhs.right + rhs.right;
return rt;
}
/*
* 功能
* 矩形相减
* 参数
* lhs in 被减的矩形
* rhs in 减去的矩形
* 返回值
* 被减后的矩形
*/
public static Rect operator - (Rect lhs, Rect rhs)
{
Console.WriteLine("operator - be called");
Rect rt = new Rect();
rt.top = lhs.top - rhs.top;
rt.left = lhs.left - rhs.left;
rt.bottom = lhs.bottom - rhs.bottom;
rt.right = lhs.right - rhs.right;
return rt;
}
/*
* 功能
* 矩形相加
* 参数
* lhs in 第一个矩形
* rhs in 第二个矩形
* 返回值
* 两个矩形相加后的矩形
*/
public static Rect Add(Rect lhs, Rect rhs)
{
Console.WriteLine("Add be called");
return lhs + rhs;
}
/*
* 功能
* 比较两个矩形是否相同
* 参数
* lhs in 第一个矩形
* rhs in 第二个矩形
* 返回值
* 如果相等,返回true
* 如中不相等,返回false
*/
public static bool operator ==(Rect lhs, Rect rhs)
{
Console.WriteLine("operator == be called");
return (lhs.left == rhs.left) && (lhs.top == rhs.top)
&& (lhs.right == rhs.right) && (lhs.bottom == rhs.bottom);
}
/*
* 功能
* 比较两个矩形是否不同
* 参数
* lhs in 第一个矩形
* rhs in 第二个矩形
* 返回值
* 如果相等,返回false
* 如中不相等,返回true
*/
public static bool operator !=(Rect lhs, Rect rhs)
{
Console.WriteLine("operator != be called");
return !(lhs == rhs);
}
/*
* 功能
* 比较两个矩形是否相同
* 参数
* lhs in 第一个矩形
* rhs in 第二个矩形
* 返回值
* 如果相等,返回true
* 如中不相等,返回false
*/
public static bool Equal(Rect lhs, Rect rhs)
{
Console.WriteLine("Equal be called");
return lhs == rhs;
}
//在重载符号时,应用将重载一对(一个用来表示正面操作,而另一个与之相反)
//在重载符号时,还应该重实现与之对应的一个成员方法,用于应用在不支持符号重载的其它.net语言
//显示与隐式转化
/*
* 功能
* 只有一个参数的转化函数
* 参数
* cord in 指定矩形的四个坐标值
* 返回值
* 以坐标值(cord,cord,cord,cord)的一个正方形
*/
public static implicit operator Rect(int cord)
{
Console.WriteLine("operator Rect be called");
Rect rt = new Rect();
rt.left = cord;
rt.top = cord;
rt.right = cord;
rt.bottom = cord;
return rt;
}
/*
* 功能
* 将Rect转化为一个int类型
* 参数
* rt in 一个矩形
* 返回值
* 这个矩形的面积
*/
public static explicit operator int(Rect rt)
{
Console.WriteLine("operator int be called");
return Math.Abs((rt.right - rt.left) * (rt.bottom - rt.top));
}
public override string ToString()
{
return "(" + left + "," + top + "," + right + "," + bottom + ")";
}
//为了方便这里将四个坐标定为了public
public int left = 0;
public int top = 0;
public int right = 0;
public int bottom = 0;
}
public class CallRect
{
public static void test()
{
Rect rtl = new Rect();
Rect rtr = new Rect();
//修改两个矩形的坐标值
rtl.Set(10, 10, 10, 10);
rtr.Set(20, 20, 20, 20);
//测试==和!=符号
Console.WriteLine("rtl == rtr is {0}", rtl == rtr);
Console.WriteLine("rtl != rtr is {0}", rtl != rtr);
//测试+和-符号
Rect rt = rtl + rtr;
Console.WriteLine("rt = ({0},{1},{2},{3})", rt.left, rt.top, rt.right, rt.bottom);
rt = rtl - rtr;
Console.WriteLine("rt = ({0},{1},{2},{3})", rt.left, rt.top, rt.right, rt.bottom);
//隐式转化
PrintRect(100);
//显示转化
PrintArea((int)rt);
}
//隐式转化测试函数
public static void PrintRect(Rect rt)
{
Console.WriteLine(rt.ToString());
}
//显示转化测试函数
public static void PrintArea(int area)
{
Console.WriteLine(area);
}
}
|