日期:2014-05-16  浏览次数:20911 次

同时重载了Equals和operator==,到底调用哪一个?

        struct s
        {
            public int i;
            public override bool Equals(object obj)
            {
                Console.WriteLine("Equanls");
                return base.Equals(obj);
            }
            public static bool operator ==(s obj1, s obj2)
            {
                Console.WriteLine("operator==");
                return obj1.i == obj2.i;
            }
            public static bool operator !=(s obj1, s obj2)
            {
                Console.WriteLine("operator!=");
                return obj1.i != obj2.i;
            }
        }

        static void Main(string[] args)
        { 
            s st1 = new s();
            st1.i = 0;
            s st2 = st1;

            Console.WriteLine(st1 == st2);
            Console.WriteLine(st1 != st2);
        }

这段程序输出
operator==
True
operator!=
False
Press any key to continue . . .

问题是,既然我也重载了Equals函数,那么这个函数在什么时候才会被调用到呢? 似乎Operator==会自动被调用,永远调用不到Equals?
------解决方案--------------------
st1.Equals(st2)不就调用了吗
------解决方案--------------------
st1.Equals(st2)