如何为我的班级实例定义运算符==
?我试过这样:
public bool operator == (Vector anotherVector)
{
return this.CompareTo(anotherVector) == 1 ;
}
但它说:
可重载的一元运算符
答案 0 :(得分:9)
您需要将方法标记为static
,并且还必须实现不等于!=
。
public static bool operator ==(Vector currentVector,Vector anotherVector)
{
return currentVector.CompareTo(anotherVector) == 1 ;
}
您必须为两个对象实施==
。
AND !=
AND
public static bool operator !=(Vector currentVector,Vector anotherVector)
{
return !(currentVector.CompareTo(anotherVector) == 1) ;
}
请参阅:Guidelines for Overloading Equals() and Operator == (C# Programming Guide)
重载的operator ==实现不应该抛出异常。 任何重载operator ==的类型也应该重载operator!=。
答案 1 :(得分:3)
与C ++不同,C ++允许将运算符定义为实例成员函数,以便左操作数成为this
指针,C#运算符重载始终作为静态成员函数完成。
没有this
指针,两个操作数都是显式参数。
public static bool operator==(Vector left, Vector right)
{
return left.CompareTo(right) == 1;
}
(虽然这似乎在语义上不正确,但通常CompareTo
为等价返回零)
答案 2 :(得分:2)
我完全赞同Habib的回答 - 同时也给它+1了......只是不要忘记处理空值。
public static bool operator ==(Vector left, Vector right)
{
if ((object)left == null)
return (object)left == null;
if ((object)right == null)
return false;
return ...;
}
太大了,无法发表评论。希望这会有所帮助。