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