如何从静态方法返回值创建C#类实例?

时间:2011-06-18 20:48:34

标签: c# constructor static-methods

我尝试使用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 个答案:

答案 0 :(得分:5)

我认为你不想要一个构造函数;你想要一个返回MyClass类型的static factory method。看起来你已经有方法FromXml了。如果你真的想要的话,你总是可以写一个copy constructor来接收另一个MyClass实例。

答案 1 :(得分:4)

我认为你需要这样的东西:

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
    }
}

答案 2 :(得分:1)

您可以创建一个非公开方法static MyClass FromXml(XElement data, MyClass instance),使用instance填充传入的data。然后,您可以从构造函数中调用它,并将this作为参数传递。