Я регулярно использую пользовательские атрибуты .Net для поддержки инструментов в моей инфраструктуре.Один пример был с очень ранних дней .Net (точнее, C # 1.0).Я работал над исследовательским проектом, у которого был собственный родной C ++ и совершенно новый C #, написанный тобой по-настоящему.
Передняя и задняя часть разделяли очень похожую объектную модель, которая развивалась очень быстро.Не желая передавать код как модели внешнего интерфейса C ++, так и механизму сериализации C ++ и механизму сериализации C #, я выбрал вместо этого атрибуцию типов C # с помощью пользовательских атрибутов.Они сказали мне части модели, которые были разделены между передней и задней частью.
Как только эти атрибуты были созданы, я написал быстрый и грязный инструмент, который
- Разобрал атрибуты для построения базовой общей модели
- Сгенерировал код сериализации C #
- Сгенерировал код C ++
- Сгенерировал код сериализации C ++
Это значительно упростило поддержание моей модели в актуальном состоянии между двумя моими проектами.Просто измените код C #, скомпилируйте и перезапустите мой инструмент.