Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何重写==运算符_C#_Operators_Operator Overloading - Fatal编程技术网

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 ...;
        }