2011-02-02 68 views
7

是否有可能产生的一类平等成员,其中也将包括从它的基类成员?ReSharper的 - 产生的平等成员,包括基类成员

例如 - 抽象基类:

public abstract class MyBaseClass 
{ 
    public int Property1; 
} 

其他类:

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

如果我自动生成与ReSharper的平等成员,我得到平等对待的仅基于MyOtherClass.Property2财产,不也是对Property1从它的基类。

回答

10

首先产生在基类平等检查,然后做它的后代。

于下降,差异将在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的不走,并追溯修改了后代的代码,你要么必须重新生成它(删除+产生),或通过手动修改代码。

+3

再生,你不需要删除。生成时,可以选择替换现有成员。 – 2011-02-02 14:26:24