0

问候,

我有一个可以从文件构造的特定对象,例如:

public class ConfigObj
{
     public ConfigObj(string loadPath)
     {
          //load object using .Net's supplied Serialization library
          //resulting in a ConfigObj object
          ConfigObj deserializedObj = VoodooLoadFunction(loadpath); 

          //the line below won't compile
          this = thisIsMyObj; 
     }
}

从本质上讲,我想说“好的,现在我们刚刚反序列化了这个对象,这就是我们实际上的对象。” 有几种方法可以做到这一点,我想知道哪种方法被认为是最佳实践。我的想法是:

  • 构建一个 copy-into-me 函数,逐个字段复制对象。这是当前的实现,我很确定这是一个可怕的想法,因为每当将新成员添加到对象时,我还需要记住将其添加到“复制到我”功能中,并且没有办法可以维护.
  • 为 ConfigObj 类构建一个静态方法,该方法充当加载对象的事实上的构造函数。这听起来好多了,但不是最佳实践。

不过,我对两者中的任何一个都不完全满意。这里公认的最佳实践是什么?

4

3 回答 3

3

您的第二个选项是所谓的工厂方法,是一种常见的设计技术。如果您确实使用了这种技术,您可能会发现在实际加载类之前需要知道要加载的类的类型。如果遇到这种情况,您可以使用更高级别的工厂类型,它查看流并为适当类型的类调用工厂方法。

于 2008-10-16T09:21:18.830 回答
2

使用静态方法而不是构造函数没有任何问题。事实上,它有很多优点

于 2008-10-16T09:30:01.217 回答
1

我总是使用静态方法。通常它是一种被加载的层次结构,因此只有根对象需要该方法。在 .NET 框架(例如 Graphics.FromImage)中,这并不是一种不寻常的方法,因此对于您的类的用户来说应该没问题。

于 2008-10-16T09:15:38.547 回答