首页 > 其他 > 详细

相等运算符重载陷阱

时间:2014-10-07 20:56:54      阅读:216      评论:0      收藏:0      [点我收藏+]

 

static void Main(string[] args)
{
Test t = new Test();
t.MyFun();
Console.ReadLine();

}

class Test
{
//自定义方法用来测试重载运算符
public void MyFun()
{
Test t = new Test();
if (t == null) Console.WriteLine("t为空!");
Console.WriteLine("t不为空!");
}
//重载相等运算符
public static bool operator ==(Test t1, Test t2)
{
return t2.Equals(t1);
}
//重载不等运算符
public static bool operator !=(Test t1, Test t2)
{
return !(t1==t2);
}
//重写HashCode方法
public override int GetHashCode()
{
return base.GetHashCode();
}
//重写Equals方法
public override bool Equals(object obj)
{
return base.Equals(obj);
}

}

分析:调试中发现t2为空。当程序判断引用变量t的值是否等于空时,就会使用相等运算符,进一步就会调用重载相等运算符所对应的方法,这样t和null就会作为该方法的参数被传入,而null恰好被传递给参数t2,而且重载方法也会调用本方法,死循环。

解决:

public static bool operator ==(Test t1, Test t2)
{
if ((t2 as object) == null)
{
return (t1 as object) == null;
}
else
{
return t2.Equals(t1);
}
}

相等运算符重载陷阱

原文:http://www.cnblogs.com/vakeynb/p/vakey.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!