@substance

Как привести объект к типу выше в древе наследования?

Если у меня есть класс FileMember, унаследованный от Grid, я без проблем приведу его к Grid, но мне надо наоборот, есть Grid и надо привести его к FileMember. Конструктора у последнего нет.
  • Вопрос задан
  • 2302 просмотра
Решения вопроса 2
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Придется делать конструктор в FileMember, который будет принимать Grid и строить себя на его основе. В этом случае связь с исходным объектом потеряется (если критично).

Как вариант, можно убрать наследование и сделать в FileMember свойство, принимающее Grid. Будет проще передавать Grid в FileMember :) Но придется изрядно доработать FileMember, чтобы он вел себя как Grid. По сути тупая переадресация будет (но подводные камни исключать нельзя, все может оказаться сложнее).

В итоге нужно выбрать, что будет проще: копировать исходный Grid в FileMember; или определить все свойства, методы Grid и т.п. в FileMember; или отказаться от идеи передавать Grid, использовать только FileMember, изменить исходную задачу на вариант с более простым решением.
Ответ написан
@mayorovp
Grid - это контрол. Я решил его унаследовать, что-бы хранить пару методов. Но теперь в FileMember надо инфлейтить разметку. Я нашёл единственный вариант: XamlReader.Load(XmlReader.Create(new StringReader(rawXaml)));
Если просто пытаться результат привести к FileMember - выпадает исключение.
Если вы считываете Grid из потока XAML - то почему нельзя считать оттуда сам FileMember? Добавьте конструктор по умолчанию и замените тэг верхнего уровня в разметке.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Если ваш Grid был инстанцирован как FileMember - то простое приведение типа и используйте (хоть это и скорее всего свидетельствует об ошибке проектирования). Если же Grid был инстанцирован как Grid - то ничего не сделаете.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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