Понимание использования "Атрибутов"

Я пытаюсь понять использование Attributes немного лучше Я это понимаю:

Теперь я хочу сделать еще немного с атрибутами и любопытно:

  • Как предопределенные атрибуты (например, DllImportAttribute или же STAThread) выполнять там функциональные возможности? Потому что мы просто используем эти атрибуты, и соответствующие функции выполняются. например, с помощью DllImportAttributeЯ просто заявляю, что мой метод abc() потребности xyz.dll и соответствующая DLL загружена. Я не написал код для поиска и загрузки DLL xyz.dll,
  • Доза .NET Runtime Environment или компиляторы обеспечивают особую обработку предопределенных атрибутов? Здесь под специальной обработкой я подразумевал, что доза .NET Runtime Environment или Compilers обнаруживает, что в коде используются некоторые предопределенные атрибуты, и запускает соответствующий метод?
  • Если да, то как я могу предоставить / добавить такую ​​информацию с помощью среды выполнения.NET или компиляторов (даже если только на моем локальном ПК), чтобы она запускала специальный метод всякий раз, когда мой определенный пользователем атрибут используется в каком-либо проекте?

1 ответ

Там нет тайны на самом деле...

Атрибут на самом деле является объектом, который связан с любым из этих элементов: Assembly, Class, Method, Delegate, Enum, Event, Field, Interface, Property а также Struct,

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

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

Из атрибутов MSDN (C#)

Атрибуты предоставляют мощный метод связывания метаданных или декларативной информации с кодом (сборки, типы, методы, свойства и т. Д.). После того, как атрибут связан с программным объектом, он может быть запрошен во время выполнения с помощью метода, называемого отражением. Для получения дополнительной информации см. Отражение (C#).

Атрибуты имеют следующие свойства:

  • Атрибуты добавляют метаданные в вашу программу. Метаданные - это информация о типах, определенных в программе. Все сборки.NET содержат определенный набор метаданных, описывающих типы и элементы типов, определенные в сборке. Вы можете добавить пользовательские атрибуты, чтобы указать любую дополнительную информацию, которая требуется. Для получения дополнительной информации см. Создание пользовательских атрибутов (C#).

  • Вы можете применить один или несколько атрибутов ко всем сборкам, модулям или меньшим элементам программы, таким как классы и свойства.

  • Атрибуты могут принимать аргументы так же, как методы и свойства.

Ваша программа может исследовать свои собственные метаданные или метаданные в других программах, используя рефлексию. Для получения дополнительной информации см. Доступ к атрибутам с помощью Reflection (C#).

Если вы хотите получить информацию о метаданных, хранящихся в атрибуте, вам нужно сделать что-то вроде этого

Exmaple

Отменено из Как прочитать атрибут класса во время выполнения?

[DomainName("MyTable")]
Public class MyClass : DomainBase
{}

...

public static class AttributeExtensions
{
    public static TValue GetAttributeValue<TAttribute, TValue>(
        this Type type, 
        Func<TAttribute, TValue> valueSelector) 
        where TAttribute : Attribute
    {
        var att = type.GetCustomAttributes(
            typeof(TAttribute), true
        ).FirstOrDefault() as TAttribute;
        if (att != null)
        {
            return valueSelector(att);
        }
        return default(TValue);
    }
}

и используйте так:

string name = typeof(MyClass).GetAttributeValue((DomainNameAttribute dna) => dna.Name);
Другие вопросы по тегам