Задать вопрос

Высокоуровневые макросы в C#, есть ли готовые решения?

Ближе к сути. Существуют задачи, которые не можно (невозможно) универсализировать через C#, нужно тупо копипастить код с некоторыми изменениями. Да можно пытаться, но кода меньше не станет. Это бесполезно. Код упирается в элементарные лексемы языка, универсализация дальше - кодогенерация.
И вот пример, который аж в стул поджаривает - реализация INotifyPropertyChanged.
Ссылка на существующее решение проблемы.
Все что предложили: T4 или ручками с использованием базового класса. Но блин, почему я должен смотреть на этот код, который пусть даже сгенерирован автоматически, если он меня бесит (не надо просить выкалывать глаза или не смотреть на него).
Его самая примитивная реализация для одного свойства включает как минимум 5 строк (примитивная в смысле ф-ционала, то есть просто уведомить о изменение значения):
Название метода
Красивая открывающая фигурная скобочка
Геттер
Сеттер
Красивая закрывающая фигурная
Вот такая вот беда. Вижу такой код и хочу убивать. Если написать кодогенератор, то можно реализовать это так:
Есть проект 1 - с которым ты активно работаешь, там ты используешь всякие декларативные штучки и наслаждаешься жизнью. Со вторым работает кодогенератор, и ты, когда производишь запуск.
Решение проблемы выше могло бы лежать в объявлении атрибута над автоматическим свойством - все.

Чего хочется?
Платформа для аддонов-плюшек декларативного кодинга (не спутайте (да мало ли с чем у вас это ассоциируется), я про сложную умную кодогенерацию).
То есть написать какую-нибудь либу, которая просто обеспечивает данные на вход и на выход. То есть, чтобы написать какой-то декларативный аддон (как для штуки выше, к примеру), мне надо просто получить экземпляр Assembly входной сборки, и методы, вроде апи, чтобы вносить модификации в исходники и структуру output-проекта.

Естественно, я хочу поинтересоваться, не хочу ли я велосипеда. Если нет, то, может, кто-то желал бы помочь в столь благом деле советом, а, может, и делом.

Добавлено через 2 минуты
Также если у кого есть желание, думаю было бы очень удобно сделать интеграцию с VS в виде расширения, но такого опыта у меня нет.
  • Вопрос задан
  • 279 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
arxont
@arxont
C# программист
Не шаблоны, но вам может помочь - посмотрите в сторону PostSharp и Fody.

К примеру https://github.com/Fody/PropertyChanged или https://doc.postsharp.net/inotifypropertychanged-add
https://github.com/tom-englert/AutoProperties.Fody
Ответ написан
@CHolfield
Что мешает сделать не шаблон а просто нормальную сборку, вынести все мыслимы и немыслимые переменные в отдельный класс? И написать короткую программку, которая будет загружать эту сборку, искать в ней этот класс, патчить и сохранять сборку через AssemblyBuilder или чотам. Этож управляемый код.
я может чето не понял, поправьте если так.

упд.
он меня бесит (не надо просить выкалывать глаза или не смотреть на него).
Его самая примитивная реализация для одного свойства включает как минимум 5 строк (примитивная в смысле ф-ционала, то есть просто уведомить о изменение значения):
Название метода
Красивая открывающая фигурная скобочка
Геттер
Сеттер
Красивая закрывающая фигурная
Вот такая вот беда. Вижу такой код и хочу убивать.


это выглядит ненормально, обратитесь к специалистам по управлению гневом.
Ответ написан
@kttotto
пофиг на чем писать
Ищите scaffolding для .net, но пишется он на основе t4. Именно так пишутся шаблоны типов проектов для vs.
Первое, что показал поиск тут.

Мы у себя на проекте делаем генерацию кода на основе метаданных в бд. Вы можете физически читать нужные Вам файлы, на их основе генерить свой код и выгружать в какое-то место в проекте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы