有关操作符重载的问题~

Cloud_drift 2011-11-09 09:44:27
我定义了这样的接口和实现类


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);
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eric_Jiang 2011-11-09
  • 打赏
  • 举报
回复
上面哥们说的是。
vrhero 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]
操作符重载是static的!因此它跟“变量指向什么类型的实例”没有关系。
[/Quote]
对...操作符是属于类型的,和实例无关...

接口是另一种类型,跟A只是有关联,并不是A...接口也不支持操作符重载,必须强制类型转换...

Console.WriteLine(((A)ifc1) == ((A)ifc2));
  • 打赏
  • 举报
回复
操作符重载是static的!因此它跟“变量指向什么类型的实例”没有关系。
qgqch2008 2011-11-09
  • 打赏
  • 举报
回复
IFC ifc1 = new A();
IFC ifc2 = new A();
Console.WriteLine((A)ifc1 == (A)ifc2);
蔡袅 2011-11-09
  • 打赏
  • 举报
回复
第二次调用:IFc是指向A实例的引用,操作的是IFC,是Object了。
黄亮 2011-11-09
  • 打赏
  • 举报
回复
你这里调用的不是A的==而是object的==,所以是false

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧