Ajouter des attributs supplémentaires à chaque propriété d'une classe
Dire que j'ai une classe avec un certain nombre de propriétés de n'importe quel type de
public class Test
{
public string A {get;set;}
public object B {get;set;}
public int C {get;set;}
public CustomClass D {get;set;}
}
Je veux tous les objets à l'intérieur de cette classe pour avoir une notion des "erreurs" et des "avertissements". Par exemple, basée sur une condition dans une autre classe, je souhaiterez peut-être définir un avertissement sur la propriété d'Un, puis d'afficher cette information dans l'interface graphique. L'interface graphique n'est pas mon souci, mais plutôt comment dois-je mettre cet avertissement? J'aimerais être capable de faire quelque chose comme:
Pour chaque propriété dans une classe, ajouter un "Avertissement" et "Erreur" bien telle que je peux faire..
Test t = new Test();
t.A.Warning = "This is a warning that the GUI will know to display in yellow".
t.B.Error = null;
Quelle est la meilleure façon de faire cela? Ce serait bien si je pouvais ajouter un attribut personnalisé pour chaque propriété de la classe qui permettrait d'ajouter à ces propriétés supplémentaires et me permettre d'y accéder de façon claire.
J'ai vu des solutions qui ajoutent un Dictionnaire de la classe parent (Test), et puis la passer dans des chaînes de caractères qui correspondent aux noms de propriétés, ou utiliser la réflexion pour obtenir le nom de la propriété et de l'en, mais je préfère quelque chose de plus propre.
source d'informationauteur user981225
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ajouter un attribut personnalisé que vous souhaitez à la propriété et d'utiliser ensuite une extension de la méthode sur l'objet pour accéder à ces attributs.
Quelque chose comme cela devrait fonctionner
D'abord, vous devrez créer votre attribut de classe
Plus De Lecture Ici
À l'utiliser comme tel
Puis d'y accéder comme si Article MSDN
Alors si vous avez un article que vous souhaitez accéder à l'avertissement sur, vous pouvez simplement appeler
Si vous êtes désireux de régler l'avertissement de la chaîne que vous avez pu mettre en œuvre une sorte de définition pour un peu plus proprement. Éventuellement par le biais de la fixation d'un objet secondaire ou le type de propriété.
Une méthode alternative pour ce faire serait au lieu de simplement en utilisant
string
etobject
vous pouvez créer un personnalisé de type générique pour gérer ce paramètre de propriété.Quelque chose comme
Utiliser comme
Si vous pouviez sortir avec une méthode au lieu de la propriété, que vous pouviez créer une extension pour objet, mais alors il serait difficile de le réduire à l'utiliser juste pour certaines classes.
Quelque chose comme:
Bien sûr, il serait difficile de maintenir un tel avertissement dans l'état de l'objet, mais vous pouvez vous servir de certains dictionnaires, etc.
Plutôt que d'essayer d'attribuer les propriétés, je vous suggère d'ajouter une collection d'erreur/d'avertissement propriétés d'une classe de base de votre entreprise les objets héritent de.
De cette façon, vous pouvez fournir des informations plus détaillées, vous pouvez les supprimer quand ils ont été affichés à l'utilisateur, et, si vous envoyez vos données sur "le fil" (services web, services wcf), les erreurs peuvent voyager avec vos objets au lieu d'exiger un traitement spécial pour envoyer les attributs.
Tout d'abord, les attributs ne peuvent pas modifier l'objet de leur mis sur. À moins que vous les combinez avec des AOP. Je vous recommande d'utiliser une classe wrapper autour de la classe par héritage, à condition que les classes ne sont pas scellés. Si ils sont scellés, alors vous aurez à l'écriture d'un véritable classe wrapper, la substitution de toutes les opérations, à l'exception de ceux de votre ajout, à un domaine privé qui est une instance de la classe de votre emballage.
Edit:
Pour la facilité d'utilisation, l'extension de la méthode de l'approche qui a été proposée est probablement la meilleure solution.