Resharper - 生成包括基类成员在内的相等成员

时间:2011-02-02 14:12:59

标签: c# .net resharper equality

是否可以为类生成相等成员,该类还包括来自其基类的成员?

例如 - 抽象基类:

public abstract class MyBaseClass
{
    public int Property1;
}

其他课程:

public class MyOtherClass: MyBaseClass
{
    public int Property2 {get; set;}
}

如果我使用Resharper自动生成相等成员,我只能基于MyOtherClass.Property2属性获得相等,而不是基于Property1基类。

1 个答案:

答案 0 :(得分:11)

首先在基类中生成相等性检查,然后在后代中进行。

在后代中,差异将在public bool Equals(MyOtherClass other)类中。

在基类中没有相等性检查:

public bool Equals(MyOtherClass other)
{
    if (ReferenceEquals(null, other))
        return false;
    if (ReferenceEquals(this, other))
        return true;
    return other.Property2 == Property2;
}

使用基类中的等式检查:

public bool Equals(MyOtherClass other)
{
    if (ReferenceEquals(null, other))
        return false;
    if (ReferenceEquals(this, other))
        return true;
    return base.Equals(other) && other.Property2 == Property2;
}

注意添加了对base.Equals(other)的调用,因此它负责基类中的属性。

注意如果你反过来这样做,你首先将等式检查添加到后代,然后将它们添加到基类,然后ReSharper不去并追溯修改代码在后代中,您必须重新生成它(删除+生成),或手动修改代码。