2010-11-03 1 views
1

Проблема в том, что у вас есть сторонний тип, например. ClassA ниже. У меня нет доступа к коду, и он не реализует Equals и GetHashCode, поэтому мне нужно написать класс оболочки, я думаю. Уравнения Equals и GetHashCode должны использовать все поля частных членов.Какой чистый/лучший способ реализовать Equals и GetHashCode на сторонних типах, к которым у вас нет доступа?

Каков наилучший способ для этого? Есть ли ярлык или шаблон, который я должен использовать?

Благодаря

public class ClassA 
{ 
    public int FieldA {get; set;} 
    public double FieldB { get; set; } 
    public string FieldC { get; set; } 
} 

ответ

0

Я бы унаследовать от ClassA и отменяют Equals и GetHashCode.

Вам нужно будет основывать свою реализацию на общедоступных свойствах, поскольку у вас нет доступа к закрытым полям.

0

Наследуйте свой класс от ClassA, а затем реализуйте GetHashCode и Equals в нем.

0

Согласно Griver и Driis выше - наследуйте или агрегатируйте ClassA и реализуйте Equals на основе свойств a.

MSDN публикует некоторые рекомендации here

1

Если вам нужно использовать ClassA в качестве ключа словаря, вы можете реализовать свой собственный класс, которые реализуют IEqualityComparer<ClassA>, и передать его в конструктор словаря. Это позволяет переопределить методы типа GetHashCode и Equals.

Смежные вопросы