是否可以为类生成相等成员,该类还包括来自其基类的成员?
例如 - 抽象基类:
public abstract class MyBaseClass
{
public int Property1;
}
其他课程:
public class MyOtherClass: MyBaseClass
{
public int Property2 {get; set;}
}
如果我使用Resharper自动生成相等成员,我只能基于MyOtherClass.Property2
属性获得相等,而不是基于Property1
基类。
答案 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不去并追溯修改代码在后代中,您必须重新生成它(删除+生成),或手动修改代码。