2010-04-12 3 views
2

ATM je ne peux pas tranquille imaginez comment cela va fonctionner. Je suis sûr que cela peut être fait. Je remarque une utilisation de pattern dans mon attribut où j'utilise toujours 3 attributs spécifiques ensemble. Prenez le dessous comme un exempleGénérer plusieurs attributs?

[MyAttr(4, @"a"), 
    MyAttr(41, "b"), 
    MyAttr(45, "ab")] 

mine est beaucoup plus compliqué, mais je voudrais définir un attribut avec plus params pour générer les données ci-dessus. Comment pourrais-je faire ça? Disons que mon un attribut ressemblera à ceci

MyAttr2(4, 41, "a", "b"); //4+41=45, "a"+"b" = "ab" 

Comment pourrais-je générer le 3 MyAttr à appliquer à une classe en utilisant MyAttr2?

+0

Voulez-vous dire le même attribut avec différents constructeurs? –

+0

Non, je veux dire le code va regarder MyAttr et il y a 3 instructions distinctes et je veux générer les 3 sans ajouter de logique pour vérifier le MyAttr2 et répliquer les 3 instructions. –

+0

Donc, fondamentalement, vous voulez avoir accès à un seul attribut "MyAttr2" qui propagerait toutes les valeurs placées dans les attributs "MyAttr" sur le même type? Si oui, pourriez-vous faire de la "MyAtt2" une façade en plus de tout attribut "MyAtt"? –

Répondre

1

Le compilateur C# ne peut pas convertir une seule entrée d'attribut en plusieurs entrées dans les métadonnées de l'assembly. Toutefois, vous pouvez modéliser votre attribut de telle sorte qu'il expose des informations d'attribut supplémentaires en tant que propriétés (ou collection). Cependant, les informations enfant ne seront pas accessibles directement par réflexion en tant qu'attributs indépendants.

+0

Hmm, ai-je besoin de modifier ma logique de code pour MyAttr? Ou puis-je le laisser seul et faire ce que vous suggérez avec la limitation de l'information enfant n'est pas accessible directement? –

+0

Si vous faites apparaître les détails d'un seul attribut exposé via certaines collections/propriétés, vous devrez alors modifier le code existant. Il est difficile de dire quelle conception correspond le mieux à vos besoins sans plus de détails sur ce que vous faites et dans combien de cas vous pourriez consolider plusieurs attributs. Cependant, l'approche de l'attribut enfant serait un changement de rupture. – LBushkin

Questions connexes