Pregunta Atributos más útiles [cerrado]


Sé que los atributos son extremadamente útiles. Hay algunos predefinidos como [Browsable(false)] que le permite ocultar propiedades en la pestaña de propiedades. Aquí hay una buena pregunta que explica los atributos: ¿Cuáles son los atributos en .NET?

¿Cuáles son los atributos predefinidos (y su espacio de nombres) que realmente usa en sus proyectos? 


728


origen


Respuestas:


[DebuggerDisplay] puede ser realmente útil para ver rápidamente el resultado personalizado de un Tipo cuando pasa el mouse sobre la instancia del Tipo durante la depuración. ejemplo:

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

Así es como debería verse en el depurador:

texto alternativo http://serialize.wordpress.com/files/2008/10/temp.jpg

Además, vale la pena mencionar que [WebMethod] atributo con CacheDuration el conjunto de propiedades puede evitar la ejecución innecesaria del método del servicio web.


638



System.Obsolete es uno de los atributos más útiles en el marco, en mi opinión. La capacidad de generar una advertencia sobre el código que ya no se debe usar es muy útil. Me encanta contar con una forma de decirles a los desarrolladores que algo no se debe usar más, así como tener una manera de explicar por qué y señalar la mejor / nueva forma de hacer algo.

los Conditional attribute es bastante útil también para el uso de depuración. Le permite agregar métodos en su código con fines de depuración que no se compilarán cuando genere su solución para su lanzamiento.

Luego, hay muchos atributos específicos de Web Controls que considero útiles, pero son más específicos y no tienen ningún uso fuera del desarrollo de los controles del servidor de los que he encontrado.


253



[Flags] es bastante útil. Azúcar sintáctico para estar seguro, pero aún bastante agradable.

[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 señala algo que no me había dado cuenta, y que más bien amortigua mi entusiasmo por este atributo: lo hace no instruir al compilador para permitir combinaciones de bits como valores válidos para las variables de enumeración, el compilador lo permite para las enumeraciones independientemente. Mi fondo de C ++ se muestra a través de ... suspiro


188



me gusta [DebuggerStepThrough] de System.Diagnostics.

Es muy útil para evitar entrar en esos métodos o propiedades de una línea sin nada (si se ve obligado a trabajar en una .Net temprana sin propiedades automáticas). Coloque el atributo en un método breve o en el captador o instalador de una propiedad, y volará directamente incluso cuando presione "entrar" en el depurador.


171



Por lo que vale, aquí está una lista de todos los atributos de .NET. Hay varios cientos.

¡No sé de nadie más pero tengo algunos RTFM serios para hacer!


128



Mi voto sería para [Conditional]

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

Puede usar esto para agregar una función con funciones avanzadas de depuración; me gusta Debug.Write, solo se llama en compilaciones de depuración y, por lo tanto, le permite encapsular lógica compleja de depuración fuera del flujo principal de su programa.


122



Yo siempre uso el DisplayName, Description y DefaultValue atributos sobre las propiedades públicas de mis controles de usuario, controles personalizados o cualquier clase que edite a través de una cuadrícula de propiedades. Estas etiquetas son utilizadas por .NET PropertyGrid para formatear el nombre, el panel de descripción y los valores en negrita que no están configurados en los valores predeterminados.

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

Solo desearía que IntelliSense de Visual Studio tomara el Description atributo en cuenta si no se encuentran comentarios XML. Evitaría tener que repetir la misma oración dos veces.


92