Да, чтение атрибутов в C# обычно производится через рефлексию (reflection). Рефлексия позволяет исследовать метаданные типов во время выполнения, и это включает в себя атрибуты. Нет прямого способа получения этих метаданных без использования рефлексии.
Пример чтения атрибута с использованием рефлексии:
```csharp
var атрибуты = typeof(ПримерКласса).GetCustomAttributes(typeof(МойАтрибут), false);
foreach (МойАтрибут атрибут in атрибуты)
{
Console.WriteLine(
quot;Описание: {атрибут.Описание}");
}
```
Что касается производительности, использование рефлексии может быть относительно медленным в сравнении с прямым доступом к членам класса. Если вы часто читаете атрибуты в критических частях вашей системы, рассмотрите возможность кеширования (caching) результатов, чтобы уменьшить накладные расходы от рефлексии.