C# 如何重写==运算符
如何为类的实例定义运算符C# 如何重写==运算符,c#,operators,operator-overloading,C#,Operators,Operator Overloading,如何为类的实例定义运算符=?我试着这样做: public bool operator == (Vector anotherVector) { return this.CompareTo(anotherVector) == 1 ; } 但它说: 应为可重载的一元运算符 您需要将该方法标记为静态,还必须实现不等于= public static bool operator ==(Vector currentVector,Vector anotherVector)
=
?我试着这样做:
public bool operator == (Vector anotherVector)
{
return this.CompareTo(anotherVector) == 1 ;
}
但它说:
应为可重载的一元运算符
您需要将该方法标记为
静态
,还必须实现不等于=代码>
public static bool operator ==(Vector currentVector,Vector anotherVector)
{
return currentVector.CompareTo(anotherVector) == 1 ;
}
您必须为两个对象实现==
和=代码>
及
见:
重载运算符==实现不应引发异常。
重载运算符==的任何类型也应重载运算符!=
不同于C++,它允许操作符定义为实例成员函数,使得左操作数变成<代码>这个指针,C运算符重载总是作为静态成员函数来完成。
此
指针不能有,并且两个操作数都是显式参数
public static bool operator==(Vector left, Vector right)
{
return left.CompareTo(right) == 1;
}
(虽然这在语义上似乎不正确,但通常情况下,CompareTo
返回零表示等价)我完全同意哈比卜的答案-也+1它。。。只是别忘了处理空值
public static bool operator ==(Vector left, Vector right)
{
if ((object)left == null)
return (object)left == null;
if ((object)right == null)
return false;
return ...;
}
太大了,不能作为他的评论发表。希望这有帮助。运算符必须是静态的。静态的
函数不能使用这个
。当然这个
在问题中是用来表示左操作数的。@BenVoigt,我对下一票很满意,因为缺少这个
。但是我更关心的是静态和实现=代码>也许是个挑剔的问题,但我建议实现=代码>在==
方面。那就是返回!(a==b)代码> @ JimMischel,是的,它使更多的感觉,然后我如何调用比较?@ USE2128702:这部分就像C++一样。如果你有两个向量a
和b
,写If(a==b)
或bool same=(a==b)代码>+1“语义不正确。”是的。尽管考虑到这一点,他应该覆盖等于(向量)
,并在这方面实现=
。即返回left.Equals(right)
。
public static bool operator ==(Vector left, Vector right)
{
if ((object)left == null)
return (object)left == null;
if ((object)right == null)
return false;
return ...;
}