zoukankan      html  css  js  c++  java
  • 相等运算符重载陷阱

    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);
    }
    }

    ——当我们面对枯燥窘迫甚至是痛苦的生活时,只是缺少了提枪上阵去干他娘的勇气!
  • 相关阅读:
    Codeforces Round #388(div 2)
    Codeforces Round #387(div 2)
    Codeforces Round #386(div 2)
    Codeforces Round #385(div 2)
    Codeforces Round #384(div 2)
    Wannafly Union Goodbye 2016
    写在2016的最后一天——给未来的自己
    2016HDU校赛
    2016BUAA校赛决赛
    codevs 1344 模拟退火
  • 原文地址:https://www.cnblogs.com/vakeynb/p/vakey.html
Copyright © 2011-2022 走看看