我想知道你是否可以看看我的代码,看看我出错了。基本上,我创建了一个类型为“UserFile”的对象(我自己的对象类型),并创建它的两个实例,并在该对象的构造函数中调用静态类方法。除了第二个实例在调用对象构造函数之后覆盖第一个实例之外,它们一切顺利。我已经通过了该计划,并且感到非常困惑。我在这里感受到错失很明显的感觉。对象实例覆盖另一个实例,但我不明白为什么
下面是创建实例
private void btnCompare_Click(object sender, EventArgs e)
{
if (lstFiles.CheckedItems.Count == 2)
{
file1 = new UserFile(((FileLocation)lstFiles.CheckedItems[0]).filePath);
file2 = new UserFile(((FileLocation)lstFiles.CheckedItems[1]).filePath);
}
}
这里窗体上的按钮时的userfile的类构造函数
public class UserFile
{
public Dictionary<int,Individual> fileIndividuals;
public Dictionary<int, Family> fileFamilies;
public Header fileHead;
public UserFile(string _dir)
{
fileIndividuals = new Dictionary<int, Individual>();
fileFamilies = new Dictionary<int, Family>();
fileHead = new Header();
ReadFromFile.Read(_dir);
fileIndividuals = ReadFromFile.individuals;
fileFamilies = ReadFromFile.families;
fileHead = ReadFromFile.head;
}
}
这里被称为由userfile的所述ReadFromFile方法class
static class ReadFromFile
{
public static string filename = "";
public static Header head;
public static Individual individual;
public static Dictionary<int, Individual> individuals = new Dictionary<int, Individual>();
public static Family family;
public static Dictionary<int, Family> families = new Dictionary<int, Family>();
public static GedcomRecordEnum currentRecord = GedcomRecordEnum.None;
public static GedcomSubRecordEnum currentFirstLvlRecord = GedcomSubRecordEnum.None;
public static GedcomSecondLevelEnum currentSecondLvlRecord = GedcomSecondLevelEnum.None;
static public void Read(string fileName)
{
individuals.Clear();
families.Clear();
head = null;
if (File.Exists(fileName))
{
filename = fileName;
StreamReader reader = new StreamReader(fileName);
while (!reader.EndOfStream)
{
string currentLine = reader.ReadLine();
Match m = Regex.Match(currentLine, "(?<index>[0-9]) (?<keyword>[[email protected]]+)(?: *)(?<detail>.*)");
string debug = m.Groups["index"].ToString();
switch (m.Groups["index"].ToString())
{
case "0":
ProcessRootLevel(m.Groups["keyword"].ToString());
break;
case "1":
ProcessLevel1(m.Groups["keyword"].ToString(), m.Groups["detail"].ToString());
break;
case "2":
ProcessLevel2(m.Groups["keyword"].ToString(), m.Groups["detail"].ToString());
break;
case "3":
ProcessLevel3(m.Groups["keyword"].ToString(), m.Groups["detail"].ToString());
break;
}
}
reader.Close();
}
}
}
谢谢,但我想知道你是否可以用更基本的术语解释它?我正在考虑第二个选项 – user1290653 2012-03-26 23:51:47
完成:)你真的想要选项#1的方式。 – 2012-03-27 00:17:17
我知道,但是当我停止ReadFromFile类是静态的,没有任何工作。我忘记了我现在静止的原因 – user1290653 2012-03-27 00:19:54