繁体   English   中英

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

[英]How to create C# class instance from a static method return value?

我尝试使用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移至构造函数应该可以,但是保存和加载将放在两个地方,或者构造函数不会全部放在一个地方...

我认为您不需要构造函数; 您需要一个返回类型为MyClass的静态工厂方法 看起来您已经可以使用FromXml方法了。 如果确实需要,您总是可以编写一个复制构造函数 ,该构造函数接受MyClass的另一个实例。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM