Resharper - генерировать элементы равенства, включая членов базового класса - PullRequest
8 голосов
/ 02 февраля 2011

Можно ли сгенерировать элементы равенства для класса, в который также входят члены из его базового класса?

Например - абстрактный базовый класс:

public abstract class MyBaseClass
{
    public int Property1;
}

Другой класс:

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

Если я автоматически генерирую элементы равенства с помощью Resharper, я получаю равенство только на основе свойства MyOtherClass.Property2, а не на Property1 из его базового класса.

1 Ответ

11 голосов
/ 02 февраля 2011

Сначала сгенерируйте проверки на равенство в базовом классе, затем сделайте это в потомке.

В потомке разница будет в классе 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), который, таким образом, становится ответственным за свойства в базеclass.

Обратите внимание , что если вы делаете это наоборот, сначала добавляете проверки на равенство потомку, а затем добавляете их в базовый класс, тогда ReSharper не идет изадним числом изменяет код в потомке, вы должны либо восстановить его (удалить + создать), либо изменить код вручную.

...