c#数据文件到对象

时间:2011-08-08 04:38:53

标签: c# xml

我正在编写一个操作某些对象的程序,我们称之为“单词”。每个单词都是几个类之一的实例。一次可以有很多这样的东西。

这些Word对象中的每一个都需要访问存储在XML文件中的字典。我不认为每个Word对象应该单独加载XML文件。 Word对象应该能够访问一些全局程序数据池。

处理这个问题的最佳方法是什么?我应该有一个名为ProgramData的类,它包含XML文档,并在创建时传递给每个Word对象吗?这不会导致XML文件的多个实例被加载到内存中,不是吗?如果不将ProgramData传递给每个新对象,我可以做我想做的事吗?

2 个答案:

答案 0 :(得分:2)

您应该将XML文件加载到ProgramData的一个实例中,然后将该实例传递到每个Word实例(可能在构造函数中)。您还可以在开始实例化Word之前在Word类中创建一个静态属性,但请确保使用lock来保证线程安全。

您的替代方案是Singleton pattern,但相信我,您don't want to go down that road

编辑:为了更清楚,这是第一个选项(我使用的那个):

public class Word
{
   private ProgramData _Data
   public Word(ProgramData data)
   {
      _Data = data;
   }

   public void MethodThatUsesData
   {
      // _Data.TryGetValue()
   }
}

// in your main method or initialization routine:
ProgramData data = MethodThatLoadsData();
Word w = new Word(data);

答案 1 :(得分:1)

您的ProgramData类可以为XmlDocument提供静态变量,因此您不必通过构造函数传递变量;你的其他类只能引用ProgramData.YourVariable。

回答你的另一个问题,不,这种方法不会导致XML文件的多个实例被加载到内存中,drharris的方法也不会。

另外,请记住,此信息适用于所有面向对象的编程语言(至少是我所知道的),而不仅仅是C#。如果在一个名为myMethod()的方法中将XML文档加载到内存中一次,而myMethod()只调用一次...猜猜看,该XML文档只会被加载到内存中一次。只有您编码的内容或其他开发代码(并且您直接或间接调用)才会发生。没有魔力。