2010-11-03 3 views
1

Le problème est que vous avez un type de tiers, par ex. Classe A ci-dessous. Je n'ai pas accès au code et il n'implémente pas Equals et GetHashCode donc j'ai besoin d'écrire une classe wrapper je pense. Les impliques Equals et GetHashCode doivent utiliser tous les champs de membre privé.Quel est le moyen le plus propre/le meilleur pour implémenter Equals et GetHashCode sur les types de tiers auxquels vous n'avez pas accès?

Quelle est la meilleure façon de faire cela? Y a-t-il un raccourci ou un modèle que je devrais utiliser?

Merci

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

Répondre

0

Je hériterait de ClassA et passer outre Equals et GetHashCode.

Vous aurez besoin de baser votre implémentation sur les propriétés publiques, car vous n'avez aucun moyen d'accéder aux champs privés.

0

Héritez votre propre classe de ClassA, puis implémentez GetHashCode et Equals.

0

Selon Griver et Driis ci-dessus - hériter ou agréger ClassA et implémenter Equals en fonction des propriétés a.

MSDN publie des lignes directrices here

1

Si vous devez utiliser ClassA comme clé de dictionnaire, vous pouvez implémenter votre propre classe qui mettent en œuvre IEqualityComparer<ClassA>, et le transmettre au constructeur du dictionnaire. Cela vous permet de remplacer les méthodes GetHashCode et Equals du type.