Как создать экземпляр класса C # из возвращаемого значения статического метода? - PullRequest
0 голосов
/ 19 июня 2011

Я пытаюсь использовать XDocument (XML Linq) для сохранения и загрузки классов.Для этого у меня есть два метода:

static MyClass FromXml(XElement data); //calls 0-parameter constructor inside
public XElement ToXml();

Конструктор, подобный этому

public MyClass(XElement data)
{
    this = MyClass.FromXml(data);
}

не работает (говорит, что это только для чтения).Можно ли это как-то сделать (не создавая копирование каждого поля вручную из возвращаемого значения)?
Или сама идея неверна?
Перемещение кода из FromXml в конструктор должно работать, но тогда сохранение и загрузка будутв двух местах или конструкторы не были бы все в одном месте ...

Ответы [ 3 ]

5 голосов
/ 19 июня 2011

Я не думаю, что вы хотите конструктор;вам нужен статический фабричный метод , который возвращает тип MyClass.Похоже, у вас уже есть это с методом FromXml.Вы всегда можете написать конструктор копирования , который принимает другой экземпляр MyClass, если вы действительно этого хотите.

4 голосов
/ 19 июня 2011

Я думаю, вам нужно что-то вроде этого:

public class MyClass
{
    public MyClass() {}
    public MyClass(XElement data)
    {
        loadXml(this, data);    
    }
    public static MyClass LoadXml(data)
    {
        var output = new MyClass();
        loadXml(output, data);
        return output;
    }
    private static void loadXml(MyClass classToInitialize, XElement data)
    {
        // your loading code goes here
    }
}
1 голос
/ 19 июня 2011

Вы можете создать закрытый метод static MyClass FromXml(XElement data, MyClass instance), который заполняет переданный instance, используя data.Затем вы можете вызвать это из конструктора, передав this в качестве аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...