interface I //: IEquatable<I>
{ }
class A : I
{
static public bool operator !=(A a, I i)
{
return !(a == i);
}
static public bool operator ==(A a, I i)
{
return true;
}
public override bool Equals(object obj)
{
if (obj is I)
return this == (I)obj;
else
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
class B : I
{
static public bool operator !=(B b, I i)
{
return !(b == i);
}
static public bool operator ==(B b, I i)
{
return false;
}
public override bool Equals(object obj)
{
if (obj is I)
return this == (I)obj;
else
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
List<I> iss = new List<I>();
A a = new A();
B b = new B();
iss.Add(a);
iss.Add(b);
if (iss[0] == iss[1])
Console.WriteLine("a == b");
else
Console.WriteLine("a != b");
if (iss[1] == iss[0])
Console.WriteLine("b == a");
else
Console.WriteLine("b != a");
}
}
输出是比较2个接口
a != b
b != a
我预计
a == b
b != a
可能有人能解释一下吗?
接口不能有运营商...但如果我需要比较两个我的呢? – serhio
如果您试图比较两个对象是否实现相同的界面,请尝试使用“关键”工作。你应该可以做一些事情,如果(A是I && B是I)。不太确定这是不是你正在寻找的。 – cptScarlet
您可能会最终使用静态比较方法或抽象基类而不是接口。 –