2008-10-16 4 views
6

Можно создать дубликат:
Most Useful Attributes in C#Есть ли другие полезные атрибуты для свойств C#?

кроме того:

[DefaultValue(100)] 
[Description("Some descriptive field here")] 
public int MyProperty{get; set;} 

Какие другие C# Атрибуты полезны для свойств, после изучения этих я чувствую, что я пропускаю.

Вопросы, относящиеся

Most Useful Attributes in C#

+0

Это настолько близко, что его дублируют со ссылкой Mitchel Sellers, просто поставили вопрос. Что дальше, полезные атрибуты или класс. перечисление и т. д .: P –

ответ

2
[Browsable] 

является моим фаворитом. (MSDN)

+0

'[DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]' это то, что я часто использую вместе с BrowsableAttribute. – newman

7
[Obsolete("This is an obsolete property")] 

Это одна из моих любимых. Позволяет пометить свойство/метод устаревшим, что вызовет предупреждение компилятора (необязательно, ошибка компилятора) при сборке.

+0

+1 Вы почти это говорите, но этот атрибут также полезен в качестве примечания для программиста во время разработки. –

2

Я давно хотел получить исчерпывающий список атрибутов C#, но никогда не нашел список в документах MSDN или в любом месте. Я думаю, что это одна из слабых частей для их документации.

Я использую [XmlIgnore], если я хочу исключить свойство из сериализации xml.

+1

В документации для класса «Атрибут» есть все, потому что отображаются классы наследования;) http://msdn.microsoft.com/en-us/library/system.attribute.aspx – FunctorSalad

0

Localizable , а также ListBindable могут быть интересны для дизайнеров пользовательских компонентов.

0

Если вы используете Description и Category в многоязычной UIs, то могут оказаться полезными в ресурсах на основе версии (отраженное от System.Windows.Forms):

[AttributeUsage(AttributeTargets.All)] 
internal sealed class SRDescriptionAttribute : DescriptionAttribute 
{ 
    private bool replaced; 

    public SRDescriptionAttribute(string description) : base(description) 
    { 
    } 

    public override string Description 
    { 
     get 
     { 
      if (!this.replaced) 
      { 
       this.replaced = true; 
       base.DescriptionValue = SR.GetString(base.Description); 
      } 
      return base.Description; 
     } 
    } 
} 

[AttributeUsage(AttributeTargets.All)] 
internal sealed class SRCategoryAttribute : CategoryAttribute 
{ 
    public SRCategoryAttribute(string category) : base(category) 
    { 
    } 

    protected override string GetLocalizedString(string value) 
    { 
     return SR.GetString(value); 
    } 
} 

где SR является оболочкой для соответствующей ResourceManager ,

0

Я использую его довольно часто при перечислениях. Имеете ли это значение «по умолчанию» или «неизвестно» в перечислении, но вы не обязательно хотите привязываться к элементу управления, как выпадающее меню? Добавьте пользовательский атрибут или используйте существующий, чтобы представлять элементы, которые должны/не должны быть видимыми.

Я много работаю с фреймворками, у которых есть события-посредники и инъекции политики, а атрибуты неоценимы, когда речь идет о украшении событий дополнительными метаданными или слабосвязанными событиями.

Есть несколько довольно новых инструментов, таких как PostSharp (http://www.postsharp.org/), которые вы можете использовать для инкапсуляции поведения внутри атрибутов. Приведите пару хороших примеров на этом сайте; удивительно, насколько проще вы можете сделать код через эти шаблоны. , ,

3

Всего несколько ...

синхронизация, встраивание и т.д.:

[MethodImpl] 

компонент Модель:

[TypeDescriptor], [DisplayName], [Editor] 

сериализации:

[Serializable], [DataMember], [XmlElement], [XmlAttribute], [NonSerialized], etc 

декларативной безопасности:

[PrincipalPermission] 

все COM-материалы ...