Подтвердить что ты не робот

Какова цель атрибутов в С#?

  • Какова цель атрибутов в С#?

  • Как узнать, какой атрибут должен использоваться для определенных функций?

  • Как добавить их динамически в С#?

  • Каковы пользовательские атрибуты?

4b9b3361

Ответ 1

  • Атрибуты предназначены для добавления дополнительной информации о классе, функции и т.д. Компиляторы иногда делают специальные вещи, когда видят атрибут. Другие атрибуты просматриваются библиотеками во время работы программы.

  • Начните с просмотра документации по требуемой функциональности. Он должен указать, какие атрибуты необходимы.

  • Нет. Атрибуты могут применяться только до компиляции кода.

  • Это просто атрибут, который вы создали самостоятельно, а не тот, который появился с .NET.

Ответ 2

Когда вы пишете свой код, вы отвечаете "что?" Вопрос:

  • что делать? (Методы)
  • что хранить? (поля и свойства)
  • что есть? (иерархии классов)

и т.д.. Атрибуты добавляют к этому вопросу другое измерение. Они отвечают "как?" вопрос. И ответ на вопрос "как?" вопрос может быть важен для IDE,

[Browsable(false)]
public string NotImportantField { get; set; } // property which will not be displayed in VS

для компилятора

[ThreadStatic]
private static RequestContext context; // field which will be different for every thread

или для другого кода, который анализирует ваш через отражение.

[XmlIgnore]
public string NotSerializableField { get; set; } // property which will not be xml-serialized

вы можете определить пользовательские атрибуты, если ваши сборки, классы, поля, методы и т.д. будут анализироваться или вызываться посредством отражения (что часто бывает, например, с инверсией управляющих контейнеров и аспектно-ориентированным программированием). Такой атрибут может (и часто является единственным способом) инструктировать invoker или анализатор вести себя по-разному в зависимости от такого присутствия атрибута или его свойств.

О вашем первом вопросе, ну, как мы знаем, какой метод вызывает конкретный результат? Одним из преимуществ быть разработчиком .NET является то, что все документально оформлено довольно тщательно.:)

Ответ 3

Атрибуты используются для декларативной модели программирования.

Атрибуты не вызывают никакой функциональности (если только это не указано). Для атрибутов "вне коробки" прочитайте документацию по msdn. Для ваших собственных атрибутов вам нужно написать код, что делать, если класс/метод и т.д. Имеет атрибут.

Я не думаю, что атрибуты добавляются динамически. Они читаются динамически. Это метаданные, которые добавляются во время компиляции. Проверьте это: Могут ли атрибуты добавляться динамически на С#?

Пользовательские атрибуты - это те, которые вы создаете, и помечайте свои классы с помощью. Чтобы создать атрибут, вам нужно создать класс (для атрибута), который наследуется от System.Attribute. Проверьте это: http://msdn.microsoft.com/en-us/library/sw480ze8.aspx

Ответ 4

Атрибуты используются для метапрограммирования. мета-программирование помогает добиться динамизма с вашим кодом во время выполнения. Скажем, у вас есть 10 реквизитов в вашем классе, и по какой-то причине вы хотите прочитать только некоторые специфические реквизиты, чтобы сделать это, вы примените некоторые специальные атрибуты к этим реквизитам и во время выполнения, используя отражение, вы попросите отфильтровать только те реквизиты с заданными специальными атрибуты, а затем выполнить свою работу на этих реквизитах. Это всего лишь один пример.

В нашем случае у нас есть механизм проверки подлинности, основанный на атрибутах. поэтому, если хотите опору. чтобы он не оставался пустым, прежде чем объект будет сохранен в базе данных, мы будем отмечать его как атрибут NotNullOrEmpty, а базовый класс будет иметь метод Validate(), который будет вызываться перед сохранением объекта в базе данных. Метод Validate() будет фильтровать obj. реквизит. с атрибутами Validatable и выполнять проверку и исключение throw в случае нарушения проверки.

Ответ 5

Атрибуты используются для предоставления метаданных о ваших классах и методах, свойствах и событиях внутри ваших классов.

Некоторые из наиболее распространенных атрибутов используются для указания информации конструктора о свойствах в классах, например Browsable и Description. Эти метаданные затем используются PropertyGrid. Другими примерами атрибутов могут быть атрибуты Serializable или Obsolete, используемые во время сериализации, или для обозначения элементов кода как устаревшие.

Вы можете добавлять атрибуты к классам, свойствам, методам и событиям, используя синтаксис [AttributeName (parameter1,...)].

Пользовательские атрибуты относятся к атрибутам, которые получены из System.Attribute, которые не являются стандартными атрибутами в .NET framework.

Ответ 6

Атрибуты используются, когда вы хотите указать определенные ограничения для своих программных утверждений:

Exapmple:

[StructLayout(LayoutKind::Sequential)]
value struct Point
{
public:
   int x;
   int y;
};

Вы указываете, что структура должна быть последовательной.

Другой пример:

 [DllImport("user32.dll",CallingConvention=CallingConvention::StdCall)]

Здесь вы указываете, чтобы импортировать DLL, используя DLLImport, используя атрибуты. Надеюсь, вы сможете узнать, что означает цель атрибута.

Теперь, как узнать, какие атрибуты будут использоваться, когда и какие функциональные возможности совпадают с тем, как вы изучили функцию, делегат и события... с течением времени и с ее помощью. Также многие люди могли бы ответить на то же самое для вас.

Ответ 7

Если вам нужен очень удобный пример того, где атрибуты могут быть полезны, и как сделать код отражения для доступа к ним, отметьте Enum ToString. Используя этот код, становится проще связать ComboBox с вашим перечислением, чтобы иметь варианты типов, а также довольно удобные для человека описания:

public static void ComboItemsFromEnum<EnumType>(ComboBox combobox) where EnumType : struct
{
    combobox.FormattingEnabled = true;
    foreach (object enumVal in System.Enum.GetValues(typeof(EnumType)))
    {
        combobox.Items.Add(enumVal);
    }
    combobox.Format += delegate(object sender, ListControlConvertEventArgs e)
    {
        e.Value = GetDescription<EnumType>(e.Value);
    };
}