Понимание использования "Атрибутов"
Я пытаюсь понять использование Attributes
немного лучше Я это понимаю:
- Как получить доступ
Attributes
в моем коде, используя отражение. - Как создать пользовательские атрибуты
- Как явно указать атрибут target
Теперь я хочу сделать еще немного с атрибутами и любопытно:
- Как предопределенные атрибуты (например,
DllImportAttribute
или жеSTAThread
) выполнять там функциональные возможности? Потому что мы просто используем эти атрибуты, и соответствующие функции выполняются. например, с помощьюDllImportAttribute
Я просто заявляю, что мой методabc()
потребностиxyz.dll
и соответствующая DLL загружена. Я не написал код для поиска и загрузки DLLxyz.dll
, - Доза .NET Runtime Environment или компиляторы обеспечивают особую обработку предопределенных атрибутов? Здесь под специальной обработкой я подразумевал, что доза .NET Runtime Environment или Compilers обнаруживает, что в коде используются некоторые предопределенные атрибуты, и запускает соответствующий метод?
- Если да, то как я могу предоставить / добавить такую информацию с помощью среды выполнения.NET или компиляторов (даже если только на моем локальном ПК), чтобы она запускала специальный метод всякий раз, когда мой определенный пользователем атрибут используется в каком-либо проекте?
1 ответ
Там нет тайны на самом деле...
Атрибут на самом деле является объектом, который связан с любым из этих элементов: Assembly
, Class
, Method
, Delegate
, Enum
, Event
, Field
, Interface
, Property
а также Struct
,
Они могут использоваться для связывания декларативной информации и извлечения такой информации (во время выполнения) с помощью отражения. Другими словами, вы можете использовать атрибуты для ввода дополнительной информации в сборки, которая может быть запрошена во время выполнения, если необходимо, используя отражение.
Атрибут в основном состоит из его имени и, необязательно, списка параметров.
Атрибуты предоставляют мощный метод связывания метаданных или декларативной информации с кодом (сборки, типы, методы, свойства и т. Д.). После того, как атрибут связан с программным объектом, он может быть запрошен во время выполнения с помощью метода, называемого отражением. Для получения дополнительной информации см. Отражение (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);