Может ли кто-нибудь объяснить преимущества (или причины) использования пользовательских атрибутов в вашем коде. Конечно, я использую (и понимаю цель) определенные атрибуты в определенных сценариях (WCF, Serialization и т.д.), Но я не могу представить никаких алгоритмов, где мне нужно было бы создавать и использовать собственные пользовательские атрибуты. Может ли кто-то предоставить реальный случай, когда использование пользовательских атрибутов приносит что-то в проект.
Почему вы используете "пользовательские атрибуты" в своем коде (.NET)
Ответ 1
Пользовательская проверка является очень хорошим вариантом использования и может быть замечена по этим ссылкам:
Ответ 2
По той же причине, что и для WCF и т.д., Но что-то конкретное для вашего проекта - вы хотите добавить некоторые метаданные некоторым членам (типам, полям, методам и т.д.), Чтобы указать что-то о задействованном механизме, и это не то, что покрывается существующие атрибуты.
Например, NUnit хотел добавить свое собственное указание, что определенный тип содержит модульные тесты - такого существующего атрибута не было, поэтому они создали TestFixtureAttribute
.
Это относительно редкое событие, конечно - но это может произойти.
Ответ 3
Если вы хотите написать свою собственную систему, такую как WCF, Serialization и т.д....
Если вы пишете код, который выполняет итерации по типам или членам, и что-то с ними, вы часто захотите использовать свои собственные атрибуты, чтобы отметить некоторые члены как разные или специальные.
Ответ 4
Я регулярно использую пользовательские атрибуты.Net для поддержки инструментов в моей инфраструктуре. Один пример был с самого раннего дня.Net (точнее, С# 1.0). Я работал над исследовательским проектом, у которого был родной C++ фронт и совершенно новый С# назад, написанный вашим поистине.
Передняя и задняя части разделяли очень похожую объектную модель, которая развивалась очень быстро. Не желая приписывать код как модели C++, так и механизма сериализации C++ и механизма сериализации С#, я выбрал вместо этого атрибуты С# с пользовательскими атрибутами. Они рассказали мне части модели, которые были разделены между передней и задней частью.
Когда эти атрибуты были на месте, я написал быстрый и грязный инструмент, который
- Разработал атрибуты для создания основной модели ядра
- Сгенерирован код сериализации С#
- Сгенерирован код C++
- Сгенерирован код сериализации C++
Это сделало его грязным простым, чтобы моя модель обновилась между моими 2 проектами. Просто измените код С#, скомпилируйте и повторно запустите мой инструмент.
Ответ 5
Я использовал аннотации в пользовательской системе AOP (Aspect-Oriented Programming), которую я разработал некоторое время назад. Атрибуты также очень полезны для управления ортогональными проблемами, такими как генерация кода.
Ответ 6
Они могут использоваться для маркировки тестов, например, в MBUnit. Они также могут быть полезны для кода, который проверяет и загружает классы (например, систему плагинов) для предоставления метаинформации.
Ответ 7
Они действительно полезны для создания объектных карт/инструментов ORM. Если вы когда-либо решили перевернуть свою собственную систему сопоставления, они почти "необходимы", чтобы получить всю необходимую функциональность. Он использовал больше для того, чтобы сделать методы/классы более универсальными и использовать отражение, чтобы определить, как обрабатывать объекты/выбирать объекты/и т.д....
Ответ 8
Чтобы дать вам конкретный случай, когда я их использовал. Мне когда-то приходилось взаимодействовать с экранизатором Mainframe. Я создал настраиваемый атрибут, чтобы аннотировать, какие поля я хотел бы отправлять из своих классов в мейнфрейм, имена, которые выходили за рамки конвенций, специальные правила для обработки форматирования и коллекций. Затем у меня был класс, который смог отразить экземпляры и понять, какое подмножество полей необходимо для взаимодействия с скребком экрана мейнфрейма соответствующим образом.