Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# - Fatal编程技术网

C# 如何使==平等地工作?

C# 如何使==平等地工作?,c#,C#,所以我有一节课,我在另一个话题中讲过: 我根据建议更改了代码,它可以正常工作。。。但是当我只是尝试比较其他地方(pointA==pointB)时,我永远不会得到它的真实性(除非ofc它们是相同的实例) 所以我怀疑==不会再次调用我的重写的equals(对象)。 然后调用什么方法?我是否也必须重写它,或者是否有办法让它调用我已经固定的equals?==是一个运算符,不调用方法。可以在C#中执行运算符重载: 不过要小心,这可能会导致代码难以理解,因为==通常用于参考比较 通常,在类中重写相等比较

所以我有一节课,我在另一个话题中讲过:

我根据建议更改了代码,它可以正常工作。。。但是当我只是尝试比较其他地方(pointA==pointB)时,我永远不会得到它的真实性(除非ofc它们是相同的实例)

所以我怀疑==不会再次调用我的重写的equals(对象)。
然后调用什么方法?我是否也必须重写它,或者是否有办法让它调用我已经固定的equals?

==
是一个运算符,不调用方法。可以在C#中执行运算符重载:

不过要小心,这可能会导致代码难以理解,因为
==
通常用于参考比较


通常,在类中重写相等比较时,可以采用以下方法:

protected bool Equals(Class other)
{
    return Equals(this.field, other.field);
}

public override bool Equals(object obj)
{
    if (ReferenceEquals(null, obj))
    {
        return false;
    }
    if (ReferenceEquals(this, obj))
    {
        return true;
    }
    if (obj.GetType() != this.GetType())
    {
        return false;
    }
    return Equals((Class)obj);
}

public static bool operator ==(Class left, Class right)
{
    return Equals(left, right);
}

最好也重写
GetHashCode()
。别忘了重载
操作符=

=
是一个运算符,不调用方法。可以在C#中执行运算符重载:

不过要小心,这可能会导致代码难以理解,因为
==
通常用于参考比较


通常,在类中重写相等比较时,可以采用以下方法:

protected bool Equals(Class other)
{
    return Equals(this.field, other.field);
}

public override bool Equals(object obj)
{
    if (ReferenceEquals(null, obj))
    {
        return false;
    }
    if (ReferenceEquals(this, obj))
    {
        return true;
    }
    if (obj.GetType() != this.GetType())
    {
        return false;
    }
    return Equals((Class)obj);
}

public static bool operator ==(Class left, Class right)
{
    return Equals(left, right);
}

最好也重写
GetHashCode()
。别忘了重载
操作符=

=
是一个运算符,不调用方法。可以在C#中执行运算符重载:

不过要小心,这可能会导致代码难以理解,因为
==
通常用于参考比较


通常,在类中重写相等比较时,可以采用以下方法:

protected bool Equals(Class other)
{
    return Equals(this.field, other.field);
}

public override bool Equals(object obj)
{
    if (ReferenceEquals(null, obj))
    {
        return false;
    }
    if (ReferenceEquals(this, obj))
    {
        return true;
    }
    if (obj.GetType() != this.GetType())
    {
        return false;
    }
    return Equals((Class)obj);
}

public static bool operator ==(Class left, Class right)
{
    return Equals(left, right);
}

最好也重写
GetHashCode()
。别忘了重载
操作符=

=
是一个运算符,不调用方法。可以在C#中执行运算符重载:

不过要小心,这可能会导致代码难以理解,因为
==
通常用于参考比较


通常,在类中重写相等比较时,可以采用以下方法:

protected bool Equals(Class other)
{
    return Equals(this.field, other.field);
}

public override bool Equals(object obj)
{
    if (ReferenceEquals(null, obj))
    {
        return false;
    }
    if (ReferenceEquals(this, obj))
    {
        return true;
    }
    if (obj.GetType() != this.GetType())
    {
        return false;
    }
    return Equals((Class)obj);
}

public static bool operator ==(Class left, Class right)
{
    return Equals(left, right);
}

最好也重写
GetHashCode()
。别忘了重载
操作符=

我不确定你的问题到底是什么

A==B评估A是否引用与B相同的对象。不是相同的值,而是相同的精确引用。为什么要使用==来比较不同的对象毫无意义。如果要比较字符串,请使用.toString()或.equals(),或编写自己的方法来比较对象


只要确保你理解==的意思,否则你就无法在逻辑中使用它。

我不确定你的问题到底是什么

A==B评估A是否引用与B相同的对象。不是相同的值,而是相同的精确引用。为什么要使用==来比较不同的对象毫无意义。如果要比较字符串,请使用.toString()或.equals(),或编写自己的方法来比较对象


只要确保你理解==的意思,否则你就无法在逻辑中使用它。

我不确定你的问题到底是什么

A==B评估A是否引用与B相同的对象。不是相同的值,而是相同的精确引用。为什么要使用==来比较不同的对象毫无意义。如果要比较字符串,请使用.toString()或.equals(),或编写自己的方法来比较对象


只要确保你理解==的意思,否则你就无法在逻辑中使用它。

我不确定你的问题到底是什么

A==B评估A是否引用与B相同的对象。不是相同的值,而是相同的精确引用。为什么要使用==来比较不同的对象毫无意义。如果要比较字符串,请使用.toString()或.equals(),或编写自己的方法来比较对象



请确保您理解==的含义,否则您将无法在逻辑中使用它。

为什么不能直接调用X.Equals(Y)?==默认为测试实例引用的相等性。另一个选项是重写==运算符。所有这些都在这里得到了很好的解释:以下是您所需要的:(查找“重写运算符==”)嗯,我不能只调用X.Equals(Y),因为我已经编写了一些代码。。。在成千上万不需要改变的人之间找到==真的不容易…为什么你不能直接调用X.Equals(Y)?==默认为测试实例引用的相等性。另一个选项是重写==运算符。所有这些都在这里得到了很好的解释:以下是您所需要的:(查找“重写运算符==”)嗯,我不能只调用X.Equals(Y),因为我已经编写了一些代码。。。在成千上万不需要改变的人之间找到==真的不容易…为什么你不能直接调用X.Equals(Y)?==默认为测试实例引用的相等性。另一个选项是重写==运算符。所有这些都在这里得到了很好的解释:以下是您所需要的:(查找“重写运算符==”)嗯,我不能只调用X.Equals(Y),因为我已经编写了一些代码。。。在成千上万不需要改变的人之间找到==真的不容易…为什么你不能直接调用X.Equals(Y)?==默认为测试实例引用的相等性。另一个选项是重写==运算符。所有这些都在这里得到了很好的解释:以下是您所需要的:(查找“重写运算符==”)嗯,我不能只调用X.Equals(Y),因为我已经编写了一些代码。。。在数千个不需要更改的其他项之间找到==并不容易…
a==b
将导致
StackOverFlowException
修复。比较语句只是一个伪占位符。这意味着我只是保持它的原样,除非它是我想要更改的类的特定组合?(即如果(a是我的班级,b是我的班级)