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

本文关键字:实例 创建 返回值 静态方法 | 更新日期: 2023-09-27 17:59:49

我尝试使用XDocument(XMLLinq)来保存和加载类。为此,我有两种方法:

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

像这样的构造函数

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

不起作用(说这是只读的)。这能以某种方式完成吗(而不需要创建从返回值手动复制每个字段)
或者这个想法是错误的
将代码从FromXml移动到构造函数应该可以,但保存和加载将在两个地方,或者构造函数不会全部在一个地方。。。

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

我认为您不想要构造函数;您想要一个返回类型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作为参数传递。