una propiedades propiedad parametros metodos implementar declarar con como clase automatico atributos agregar c# attributes automatic-properties

c# - parametros - ¿Las propiedades implementadas automáticamente admiten atributos?



propiedades con parametros c# (4)

Me dijeron que en c # los atributos no están permitidos en las propiedades implementadas automáticamente. ¿Es eso cierto? si es así ¿por qué?

EDITAR: ¡Obtuve esta información de un libro popular en LINQ y no podía creerlo! EDITAR: consulte la página 34 de LINQ Unleashed por Paul Kimmel donde dice "Los atributos no están permitidos en las propiedades implementadas automáticamente, así que imprima el suyo si necesita un atributo "


La forma más fácil de probar que está mal es simplemente probarlo:

using System; using System.ComponentModel; using System.Reflection; class Test { [Description("Auto-implemented property")] public static string Foo { get; set; } static void Main(string[] args) { var property = typeof(Test).GetProperty("Foo"); var attributes = property.GetCustomAttributes (typeof(DescriptionAttribute), false); foreach (DescriptionAttribute description in attributes) { Console.WriteLine(description.Description); } } }

Sugiero que envíe un correo electrónico al autor para que lo publique como una errata. Si quiso decir que no puede aplicar un atributo al campo , esto le dará la oportunidad de explicarlo con más cuidado.


Puede aplicar atributos a propiedades automáticas sin problemas.

Cita de MSDN :

Los atributos están permitidos en las propiedades implementadas automáticamente, pero obviamente no en los campos de respaldo, ya que no se puede acceder a ellos desde su código fuente. Si debe usar un atributo en el campo de respaldo de una propiedad, simplemente cree una propiedad regular.


Tenga en cuenta también que cualquier propiedad automática tendrá el CompilerGeneratedAttribute aplicado también.


Creo que el autor quiso decir que no puede aplicar atributos personalizados al campo de respaldo privado. Por ejemplo, si desea marcar la propiedad automática como no serializada, no puede hacer esto:

[Serializable] public class MyClass { [field:NonSerializedAttribute()] public int Id { get; private set; } }

Este código se compila, pero no funciona. Puede aplicar un atributo a la propiedad en sí, pero no puede aplicarlo para el campo de respaldo.