我定义了这样的接口和实现类
interface IFC
{
        
}class A : IFC
{
    public static bool operator ==(A ifc1, A ifc2)
    {
        return true;
    }    public static bool operator !=(A ifc1, A ifc2)
    {
        return false;
    }    public override bool Equals(object obj)
    {
        return true;
    }    public override int GetHashCode()
    {
        return base.GetHashCode();
    }
}
然后,当我这样进行比较,结果是 true 。这里没问题。
A ifc1 = new A();
A ifc2 = new A();
Console.WriteLine(ifc1 == ifc2);
可是当我这样比较的时候,结果却是 False,请问是为什么呢?怎么重载操作符可以使这样也是 True 呢?IFC ifc1 = new A();
IFC ifc2 = new A();
Console.WriteLine(ifc1 == ifc2);

解决方案 »

  1.   

    你这里调用的不是A的==而是object的==,所以是false
      

  2.   

    第二次调用:IFc是指向A实例的引用,操作的是IFC,是Object了。
      

  3.   

    IFC ifc1 = new A();
    IFC ifc2 = new A();
    Console.WriteLine((A)ifc1 == (A)ifc2);
      

  4.   

    操作符重载是static的!因此它跟“变量指向什么类型的实例”没有关系。
      

  5.   

    对...操作符是属于类型的,和实例无关...接口是另一种类型,跟A只是有关联,并不是A...接口也不支持操作符重载,必须强制类型转换...Console.WriteLine(((A)ifc1) == ((A)ifc2));