Проблемы с наследованием
От: Namelles.One  
Дата: 03.06.11 09:34
Оценка:
Попал в немного нестандартную ситуацию. Вводная такова:
Есть группа файлов, в каждом из которых — стопка классов. Файлы с классами генерируются автоматически, на основе xml-ек, при помощи специальной тулзы, соответственно, править код в них мы не имеем права, так как при следующей перегенерации — все пропадет.

Радует одно — все классы объявлены как partial, соответственно недостающий код к ним можно дописывать, создавая новые файлы. Раньше делали просто — для каждой связки xml+сгенереный cs — писали имя_файла_ext.cs, в котором и дописывали все, что надо.

Но, проект разросся, а структура xml-ек, соответственно, как и сгенеренных классов — почти не отличаются, а уж ext-файлы вообще почти идентичны. Итого, выросла стопка копипащенного кода, что есть плохо.

Отсюда возникает вопрос — как уйти от множественных ext файлов, перейдя к одному какому-то. Соответственно, в идеале бы получить возможность создавать объект не какого-то конкретного типа из сгенеренных, а некоего надкласса, и на месте уже кастовать его к одному из сгенеренных, получая дополнительный функционал. Но, сгенеренные классы — уже наследованы от неких стандартных классов, а множественного наследования в C# нет.

Вот и вопрос — вообще возможно решить эту проблему?
наследование c# .net
Re: Аггрегация
От: Qbit86 Кипр
Дата: 03.06.11 09:39
Оценка:
Здравствуйте, Namelles.One, Вы писали:

NO>...а множественного наследования в C# нет. Вот и вопрос — вообще возможно решить эту проблему?


Заменить наследование аггрегацией?
Глаза у меня добрые, но рубашка — смирительная!
Re: Проблемы с наследованием
От: _FRED_ Черногория
Дата: 03.06.11 09:43
Оценка:
Здравствуйте, Namelles.One, Вы писали:

NO>Попал в немного нестандартную ситуацию. Вводная такова:

NO>Есть группа файлов, в каждом из которых — стопка классов. Файлы с классами генерируются автоматически, на основе xml-ек, при помощи специальной тулзы, соответственно, править код в них мы не имеем права, так как при следующей перегенерации — все пропадет.
NO>Радует одно — все классы объявлены как partial, соответственно недостающий код к ним можно дописывать, создавая новые файлы. Раньше делали просто — для каждой связки xml+сгенереный cs — писали имя_файла_ext.cs, в котором и дописывали все, что надо.
NO>Но, проект разросся, а структура xml-ек, соответственно, как и сгенеренных классов — почти не отличаются, а уж ext-файлы вообще почти идентичны. Итого, выросла стопка копипащенного кода, что есть плохо.
NO>Отсюда возникает вопрос — как уйти от множественных ext файлов, перейдя к одному какому-то. Соответственно, в идеале бы получить возможность создавать объект не какого-то конкретного типа из сгенеренных, а некоего надкласса, и на месте уже кастовать его к одному из сгенеренных, получая дополнительный функционал. Но, сгенеренные классы — уже наследованы от неких стандартных классов, а множественного наследования в C# нет.
NO>Вот и вопрос — вообще возможно решить эту проблему?

А что мешашает генерить "ext-файлы", а не копипейстить их? Если ли в этих файлах какая-то специфика используемого типа?
Help will always be given at Hogwarts to those who ask for it.
Re: Проблемы с наследованием
От: adontz Грузия http://adontz.wordpress.com/
Дата: 03.06.11 09:43
Оценка:
Здравствуйте, Namelles.One, Вы писали:

extension методами никак?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Аггрегация
От: Namelles.One  
Дата: 03.06.11 09:44
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, Namelles.One, Вы писали:


NO>>...а множественного наследования в C# нет. Вот и вопрос — вообще возможно решить эту проблему?


Q>Заменить наследование аггрегацией?


Не уверен, что она поможет, так как в коде из ext файлов приходится много использовать приватные поля и методы сгенереных классов. Агрегация же, насколько я понимаю, лишит нас такой возможности? Или я неправ?
Re[2]: Проблемы с наследованием
От: Namelles.One  
Дата: 03.06.11 09:48
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Namelles.One, Вы писали:


NO>>Попал в немного нестандартную ситуацию. Вводная такова:

NO>>Есть группа файлов, в каждом из которых — стопка классов. Файлы с классами генерируются автоматически, на основе xml-ек, при помощи специальной тулзы, соответственно, править код в них мы не имеем права, так как при следующей перегенерации — все пропадет.
NO>>Радует одно — все классы объявлены как partial, соответственно недостающий код к ним можно дописывать, создавая новые файлы. Раньше делали просто — для каждой связки xml+сгенереный cs — писали имя_файла_ext.cs, в котором и дописывали все, что надо.
NO>>Но, проект разросся, а структура xml-ек, соответственно, как и сгенеренных классов — почти не отличаются, а уж ext-файлы вообще почти идентичны. Итого, выросла стопка копипащенного кода, что есть плохо.
NO>>Отсюда возникает вопрос — как уйти от множественных ext файлов, перейдя к одному какому-то. Соответственно, в идеале бы получить возможность создавать объект не какого-то конкретного типа из сгенеренных, а некоего надкласса, и на месте уже кастовать его к одному из сгенеренных, получая дополнительный функционал. Но, сгенеренные классы — уже наследованы от неких стандартных классов, а множественного наследования в C# нет.
NO>>Вот и вопрос — вообще возможно решить эту проблему?

_FR>А что мешашает генерить "ext-файлы", а не копипейстить их? Если ли в этих файлах какая-то специфика используемого типа?


Вот это уже интересная идея. Вообще уже возникла мысль доработать код генератора. Просто писал его не я и, это последнее, к чему хотелось бы прибегать — боюсь погрязнуть по колено в коде...
Re: Проблемы с наследованием
От: adontz Грузия http://adontz.wordpress.com/
Дата: 03.06.11 09:48
Оценка:
Здравствуйте, Namelles.One, Вы писали:

А если генерировать в два этапа, постобрабатывать файлы ещё раз, вставляя нужный код?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Аггрегация
От: Jack128  
Дата: 03.06.11 09:52
Оценка:
Здравствуйте, Namelles.One, Вы писали:

NO>Здравствуйте, Qbit86, Вы писали:


Q>>Здравствуйте, Namelles.One, Вы писали:


NO>>>...а множественного наследования в C# нет. Вот и вопрос — вообще возможно решить эту проблему?


Q>>Заменить наследование аггрегацией?


NO>Не уверен, что она поможет, так как в коде из ext файлов приходится много использовать приватные поля и методы сгенереных классов. Агрегация же, насколько я понимаю, лишит нас такой возможности? Или я неправ?


так, ты сказал, что код всех ext файлов практически идентичен, значит в каждом из генерированных классов идентичный набор прайвет полей?? ИМХО тогда можно заюать паттерн "паблик морозов". В ext файлах для всех классов нагенить реализацию интерфейса (лучше явную реализацию), который дает доступ к нужным вам полям. Ну и соответсвенно вынести все логику в отдельный класс, который агрегирует этот интерфейс, либо экстеншены для этого интерфейса наваять.
Re[4]: Аггрегация
От: Qbit86 Кипр
Дата: 03.06.11 09:55
Оценка:
Здравствуйте, Jack128, Вы писали:

J>либо экстеншены для этого интерфейса наваять.


Экстеншн-методы в сгенерённом коде вообще не нужны, и даже противопоказаны. Экстеншн-методы в C# — это синтаксический сахар для вызова метода. Зечем он в коде, где вызов методов генерируется?
Глаза у меня добрые, но рубашка — смирительная!
Re[5]: Аггрегация
От: Jack128  
Дата: 03.06.11 10:00
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, Jack128, Вы писали:


J>>либо экстеншены для этого интерфейса наваять.


Q>Экстеншн-методы в сгенерённом коде вообще не нужны, и даже противопоказаны. Экстеншн-методы в C# — это синтаксический сахар для вызова метода. Зечем он в коде, где вызов методов генерируется?


э-э-э. Откуда следую, что _вызов_ методов из ext файлов генериться??
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.