您的位置:首页 > 编程语言 > C#

天轰穿C# -vs2010 - 04面向对象的编程之运算符重载的示例【原创】

2013-01-06 13:15 253 查看
小天:别总是光说不练好不好,来点实际的吧。我都习惯了从例题中学习,而不是看概念学习了。

老田:哎,下面就来开发一个结构Record,来演示运算符重载,第一个重载是复写了ToString方法。

using System;

namespace operator_overload

{

public struct Record //注意,这里是结构

{

private int x, y;

public Record(int num1, int num2)

{

x = num1;

y = num2;

}

///<summary>

///复写ToString方法,在界面上例题一

///</summary>

///<returns></returns>

public override string ToString()

{

string str=string.Format("[{0},{1}]", x, y);

return str;

//上面这两句按照如下形式写更节约,想下为什么

//return string.Format("[{0},{1}]", x, y);

}

}

}

接下来,使用这个方法,在Button_Click1事件中写如下代码

private void button1_Click(object sender, EventArgs e)

{

//创建两个Record对象

Record r1 = new Record(200, 300);

Record r2 = new Record(30, 60);

//看下这两个的显示情况

MessageBox.Show("r1=" + r1.ToString() + " , r2=" + r2.ToString() + "");

//上面这句显示结果为r1 = [200,300] , r2=[30,60]

}

小天:如何重载符号呢?我刚才试了几种都不行哦。我希望直接在代码中用r1加或者减r2,以得到值。

老田:如下,我们继续在Record结构中添加代码,以重载 + 和–号

///<summary>

///重载 + 运算符

///</summary>

///<param name="r1">Record 对象 1</param>

///<param name="r2">Record 对象 2</param>

///<returns>已经执行运算后的新的 Record 对象</returns>

public static Record operator +(Record r1, Record r2)

{

//用传入的参数r1和r2的x、y这两个字段分别相加,并实例成一个新的record对象返回出去

return new Record(r1.x + r2.x, r1.y + r2.y);

}

///<summary>

///重载 - 运算符

///</summary>

///<param name="r1">Record 对象 1</param>

///<param name="r2">Record 对象 2</param>

///<returns>已经执行运算后的新的 Record 对象</returns>

public static Record operator -(Record r1, Record r2)

{

//用传入的参数r1和r2的x、y这两个字段分别相减,并实例成一个新的record对象返回出去

return new Record(r1.x - r2.x, r1.y - r2.y);

}

接下来,我们在示例窗体上再添加一个按钮,双击产生Button_Click2事件,并输入如下代码

private void button2_Click(object sender, EventArgs e)

{

//创建两个Record对象

Record r1 = new Record(200, 300);

Record r2 = new Record(30, 60);

//申明r3和r4分别等于r1和r2相加、减之后的新对象

Record r3 = r1 + r2;

Record r4 = r1 - r2;

MessageBox.Show("r3=" + r3.ToString() + " , r4=" + r4.ToString() + "");

//上面这句显示结果为r3 = [230,340] , r4=[170,240]

}

小天:上面的这段代码看起来并没有什么特色啊。

老田:是没有特色,不过你想下+、-号什么时候可以应用于对象的加减了呢?

小天:哦明白了,+、- 号通常只应用与预定义数值类型之间的运算,这里我们重载了之后居然可以对对象执行加减运算了。

对了,你上面说,+=和-=不能重载,但是只要+、-这两给被重载了,那么+=和-=也就同时拥有了新功能,这是真的吗?怎么来试用下看看?

老田:那多简单啊,在窗体上再增加一个按钮,双击在Button_Click3事件中编写如下代码

private void button3_Click(object sender, EventArgs e)

{

//-=

Record r1 = new Record(200, 300);

Record r2 = new Record(30, 60);

r1-=r2;

MessageBox.Show(r1.ToString());

//+=

Record r3 = new Record(200, 300);

Record r4 = new Record(30, 60);

r3 += r4;

MessageBox.Show(r3.ToString());

}

老田:好吧,你练习吧,至少练习10个运算符哦,还有就是将前面所学的知识都融合起来。

本文章为天轰穿原创作品,转载请注明出处及作者。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐