c#数据文件到对象

本文关键字:对象 文件 数据 | 更新日期: 2023-09-27 18:04:51

我正在写一个程序,它将操作某些对象,我们称它们为"Words"。每个单词都是几个类中的一个实例。一次可以有很多很多。

每个Word对象都需要访问存储在XML文件中的字典。我不觉得每个Word对象都应该分别加载XML文件。Word对象应该能够访问程序数据的全局池。

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

c#数据文件到对象

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

你的选择是Singleton模式,但是相信我,你不会想走那条路的。

编辑:为了更清楚,这是第一个选项(我要使用的):
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);

ProgramData类可以有一个用于XmlDocument的静态变量,因此您不必通过构造函数传递该变量;您的其他类可以只引用ProgramData.YourVariable。

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

另外,请记住,这些信息适用于所有面向对象的编程语言(至少是我所知道的那些),而不仅仅是c#。如果在myMethod()方法中将XML文档加载到内存中一次,而myMethod()只被调用一次……你猜怎么着,那个XML文档只会被加载到内存中一次。只有那些你编码的事情,或者其他开发者编码的事情(你直接或间接调用)才会发生。没有魔法。