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
您可能會最終使用靜態比較方法或抽象基類而不是接口。 –