Какова цель атрибутов в C #? - PullRequest
       13

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

12 голосов
/ 09 сентября 2010
  • Какова цель атрибутов в C #?

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

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

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

Ответы [ 7 ]

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

  2. Начните с просмотра документации по нужным вам функциям.В нем должны быть указаны необходимые атрибуты.

  3. Нет.Атрибуты могут быть применены только до того, как код скомпилирован.

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

7 голосов
/ 09 сентября 2010

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

  1. что делать? (методы)
  2. что хранить? (поля и свойства)
  3. что есть что? (иерархия классов)

и т.д.. Атрибуты добавляют еще одно измерение к этому вопросу. Они отвечают "как?" вопрос. И ответ на "как?" вопрос может быть важным для 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

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

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

4 голосов
/ 09 сентября 2010

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

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

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

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

3 голосов
/ 09 сентября 2010

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

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

1 голос
/ 09 сентября 2010

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

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

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

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

0 голосов
/ 09 сентября 2010

Если вам нужен очень полезный пример того, где атрибуты могут быть полезны, и как сделать код отражения для доступа к ним, отметьте 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);
    };
}
0 голосов
/ 09 сентября 2010

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

Exapmple:

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...