На самом деле никакой тайны...
На самом деле атрибут — это объект, связанный с любым из следующих элементов: Assembly
, Class
, Method
, Delegate
, Enum
, Event
, Field
, Interface
, Property
и Struct
.
Их можно использовать для связывания декларативной информации и извлечения такой информации (во время выполнения) с помощью отражения. Другими словами, вы можете использовать атрибуты для ввода дополнительной информации в сборки, которые могут быть запрошены в Время выполнения, если это необходимо с использованием отражения.
Атрибут в основном состоит только из его имени и, необязательно, списка параметров.
Из MSDN Атрибуты (C#)
Атрибуты предоставляют мощный метод связывания метаданных или декларативной информации с кодом (сборками, типами, методами, свойствами и т. д.). После того, как атрибут связан с программным объектом, атрибут может быть запрошен во время выполнения с использованием метода, называемого отражением. Дополнительные сведения см. в разделе Отражение (C#).
Атрибуты имеют следующие свойства:
Атрибуты добавляют метаданные в вашу программу. Метаданные — это информация о типах, определенных в программе. Все сборки .NET содержат указанный набор метаданных, описывающих типы и члены типов, определенные в сборке. Вы можете добавить настраиваемые атрибуты, чтобы указать любую дополнительную информацию, которая требуется. Дополнительные сведения см. в разделе Создание настраиваемых атрибутов (C#).
Вы можете применить один или несколько атрибутов ко всем сборкам, модулям или меньшим элементам программы, таким как классы и свойства.
Атрибуты могут принимать аргументы так же, как методы и свойства.
Ваша программа может проверять свои собственные метаданные или метаданные в других программах с помощью отражения. Дополнительные сведения см. в разделе Доступ к атрибутам с помощью отражения (C#).
Если вы хотите получить информацию о метаданных, хранящихся в атрибуте, вам нужно сделать что-то вроде этого
Пример
Взято из Как прочитать атрибут в класс во время выполнения?
[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);
person
TheGeneral
schedule
14.03.2018
Attributes
в C#.NET. - person cse   schedule 14.03.2018