Я знаю, что то, что я спрашиваю, не будет работать таким образом, но я думаю, что моя первоначальная идея не настолько глупа.
Итак, представьте такую структуру кода:
abstract class Element
class A : Element
class B : Element
class C : Element
Родительский класс Element обрабатывает загрузку файлов и сохраняет дочерние классы в структуру данных, такую как XML-файл.
Чтобы сохранить все элементы, класс Element создает базовую структуру XML и передает XmlElement в метод OnSave () каждого дочернего класса.
У каждого дочернего элемента есть немного отличающаяся структура данных, поэтому они реализуют, как сохранить себя в XmlElement, который родитель передал им.
Однако для загрузки родительский класс должен выполнить итерацию по заданному XML-файлу и создать экземпляры дочерних объектов на основе информации, содержащейся в файле.
Поскольку система сохранения сконфигурирована для хранения всех дочерних экземпляров в ветви для соответствующего типа, она знает, какой тип создавать для каждого набора данных.
Поскольку файловые структуры всех дочерних объектов снова немного отличаются, было бы разумно, чтобы дочерние объекты реализовали статическую функцию, которая создает собственный экземпляр, заполненный данными, передаваемыми указанной функции родительским объектом.
Поскольку мне нужно, чтобы все дочерние элементы реализовывали эту функцию, я инстинктивно начал печатать
protected static abstract Element Load(XmlElement xml);
Пока я не заметил, что это не имеет смысла.
Теперь у меня вопрос: как интеллектуальная система, подобная этой, будет реализована?
Edit:
Обратите внимание, что функция Load элемента будет статической.