Question Attributs les plus utiles [fermé]


Je sais que les attributs sont extrêmement utiles. Il y en a des prédéfinis tels que [Browsable(false)] ce qui vous permet de masquer les propriétés dans l'onglet Propriétés. Voici une bonne question expliquant les attributs: Quels sont les attributs dans .NET?

Quels sont les attributs prédéfinis (et leur espace de nommage) que vous utilisez réellement dans vos projets? 


728


origine


Réponses:


[DebuggerDisplay] peut être très utile pour voir rapidement la sortie personnalisée d'un Type lorsque vous passez la souris sur l'instance du Type pendant le débogage. Exemple:

[DebuggerDisplay("FirstName={FirstName}, LastName={LastName}")]
class Customer
{
    public string FirstName;
    public string LastName;
}

Voici comment il devrait apparaître dans le débogueur:

alt text http://serialize.wordpress.com/files/2008/10/temp.jpg

En outre, il convient de mentionner que [WebMethod] attribuer avec CacheDuration jeu de propriétés peut éviter l'exécution inutile de la méthode de service Web.


638



System.Obsolete est l'un des attributs les plus utiles dans le cadre, à mon avis. La possibilité de déclencher un avertissement sur le code qui ne devrait plus être utilisé est très utile. J'aime trouver un moyen de dire aux développeurs que quelque chose ne devrait plus être utilisé, ainsi que d'avoir un moyen d'expliquer pourquoi et de pointer vers la meilleure / nouvelle façon de faire quelque chose.

le Conditional attribute est très pratique aussi pour l'utilisation du débogage. Il vous permet d'ajouter des méthodes dans votre code à des fins de débogage qui ne seront pas compilées lorsque vous construisez votre solution pour la publication.

Ensuite, il y a beaucoup d'attributs spécifiques aux contrôles Web que je trouve utiles, mais ceux-ci sont plus spécifiques et n'ont aucune utilité en dehors du développement des contrôles serveur à partir de ce que j'ai trouvé.


253



[Flags] est très pratique. Du sucre syntactique pour être sûr, mais quand même plutôt sympa.

[Flags] 
enum SandwichStuff
{
   Cheese = 1,
   Pickles = 2,
   Chips = 4,
   Ham = 8,
   Eggs = 16,
   PeanutButter = 32,
   Jam = 64
};

public Sandwich MakeSandwich(SandwichStuff stuff)
{
   Console.WriteLine(stuff.ToString());
   // ...
}

// ...

MakeSandwich(SandwichStuff.Cheese 
   | SandwichStuff.Ham 
   | SandwichStuff.PeanutButter);
// produces console output: "Cheese, Ham, PeanutButter"

Leppie signale quelque chose que je n'avais pas réalisé, et qui atténue plutôt mon enthousiasme pour cet attribut: il fait ne pas ordonne au compilateur d'autoriser les combinaisons de bits en tant que valeurs valides pour les variables d'énumération, le compilateur le permet pour les énumérations indépendamment. Mon fond de C ++ montrant à travers ... soupir


188



J'aime [DebuggerStepThrough] de System.Diagnostics.

Il est très pratique pour éviter d'entrer dans ces méthodes ou propriétés à une seule ligne (si vous êtes obligé de travailler dans un .Net précoce sans propriétés automatiques). Placez l'attribut sur une méthode courte ou sur le getter ou le setter d'une propriété, et vous volerez à droite même si vous frappez "step into" dans le débogueur.


171



Pour ce que ça vaut, voici une liste de tous les attributs .NET. Il y en a plusieurs centaines.

Je ne sais pas pour quelqu'un d'autre mais j'ai de sérieuses RTFM à faire!


128



Mon vote serait pour [Conditional]

[Conditional("DEBUG")]
public void DebugOnlyFunction()
{
    // your code here
}

Vous pouvez l'utiliser pour ajouter une fonction avec des fonctionnalités avancées de débogage; comme Debug.Write, il n'est appelé que dans les versions de débogage et vous permet ainsi d'encapsuler une logique de débogage complexe en dehors du flux principal de votre programme.


122



J'utilise toujours le DisplayName, Description et DefaultValue attributs sur les propriétés publiques de mes contrôles utilisateur, contrôles personnalisés ou toute classe que je vais modifier via une grille de propriétés. Ces balises sont utilisées par .NET PropertyGrid pour formater le nom, le panneau de description et les valeurs bolds qui ne sont pas définies sur les valeurs par défaut.

[DisplayName("Error color")]
[Description("The color used on nodes containing errors.")]
[DefaultValue(Color.Red)]
public Color ErrorColor
{
    ...
} 

Je souhaite juste que IntelliSense de Visual Studio prendrait le Description attribuer en compte si aucun commentaire XML n'est trouvé. Cela éviterait d'avoir à répéter deux fois la même phrase.


92



[Serializable] est utilisé tout le temps pour sérialiser et désérialiser des objets vers et à partir de sources de données externes telles que xml ou à partir d'un serveur distant. Plus à ce sujet ici.


66



Dans l'esprit de Hofstadtian, le [Attribute] attribut est très utile, car c'est comme ça que vous créez vos propres attributs. J'ai utilisé des attributs au lieu d'interfaces pour implémenter des systèmes de plugins, ajouter des descriptions à Enums, simuler plusieurs dispatch et autres astuces.


54