【问题标题】:How to create C# class instance from a static method return value?如何从静态方法返回值创建 C# 类实例?
【发布时间】:2011-06-18 20:48:33
【问题描述】:

我尝试使用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 类型的临时变量中,然后像这里描述的那样执行值复制:stackoverflow.com/questions/3610891/…
  • 忘掉那个ctor,直接使用FromXml()吧。

标签: c# constructor static-methods


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-06-07
        • 2011-02-27
        • 2013-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多