我希望能够遍历引用自己属性的类属性。你为什么会问?因为如果我想向该类添加更多属性,稍后管理会更容易。自引用属性数组
让我解释更多:
public interface IElementBox
{
string Filename { get; }
string FileDefinition { get; set; }
void ExtractFromFile(string stringData);
}
public abstract class Element
{
public Element(string stringData)
{
this.DefFromFile(stringData);
}
public string Name { get; set; }
protected abstract void DefFromFile(string stringData);
}
public class Solid : Element
{
public Solid(string stringData) : base(stringData) { }
public string SolidSpecificProperty { get; set; }
protected override void DefFromFile(string stringData)
{
// Assign SolidSpecificProperty from string
}
}
public class Liquid : Element
{
public Liquid(string stringData) : base(stringData) { }
public string LiquidSpecificProperty { get; set; }
protected override void DefFromFile(string stringData)
{
// Assign LiquidSpecificProperty from string
}
}
public class Gas : Element
{
public Gas(string stringData) : base(stringData) { }
public string GasSpecificProperty { get; set; }
protected override void DefFromFile(string stringData)
{
// Assign GasSpecificProperty from string
}
}
public abstract class ElementBox<T> : IElementBox where T : Element
{
public List<T> Elements { get; set; }
public List<T> GetElementsFromName(string name)
{
return this.Elements.FindAll(x => x.Name == name);
}
public abstract string Filename { get; }
public string FileDefinition { get; set; }
public abstract void ExtractFromFile(string filename);
}
public class SolidBox : ElementBox<Solid>
{
public override string Filename
{
get { return "Solid.txt"; }
}
public override void ExtractFromFile(string stringData)
{
this.Elements.Add(new Solid(stringData));
}
}
public class LiquidBox : ElementBox<Liquid>
{
public override string Filename
{
get { return "Liquid.txt"; }
}
public override void ExtractFromFile(string stringData)
{
this.Elements.Add(new Liquid(stringData));
}
}
public class GasBox : ElementBox<Gas>
{
public override string Filename
{
get { return "Gas.txt"; }
}
public override void ExtractFromFile(string stringData)
{
this.Elements.Add(new Gas(stringData));
}
}
public static class DataDefinition
{
public static SolidBox SolidBox { get; set; }
public static LiquidBox LiquidBox { get; set; }
public static GasBox GasBox { get; set; }
public static IElementBox[] ElementBoxes = new IElementBox[] { DataDefinition.SolidBox, DataDefinition.LiquidBox, DataDefinition.GasBox };
}
public static class Loader
{
public static void LoadInfo()
{
for (int elementBoxNb = 0; elementBoxNb < DataDefinition.ElementBoxes.Length; elementBoxNb++)
{
string dataFilepath = DataDefinition.ElementBoxes[elementBoxNb].Filename;
System.IO.StreamReader sr = System.IO.File.OpenText(dataFilepath);
DataDefinition.ElementBoxes[elementBoxNb].ExtractFromFile(sr.ReadToEnd());
}
}
}
这种结构的全部目的是为了能够定义在一个文本文件中的所有对象的属性。这样就可以从该文本文件定义中动态分配所有SolidBox.Elements对象。
我的问题如下:
请问属性数组DataDefinition通过值引用。这意味着我所有的数据分配都会被吸收到虚空中?
如果是(或否),他们是一个更好的方式做整件事情/什么是最好的方式来做到这一点?
我一直在研究这个数据结构一段时间,现在我为我能实现的目标感到自豪。如果所有这些都是毫无价值的,我会感到难过。尽管如果你能为我提供一个更好的/最佳的方式来完成整个事情,我会很感激,并将我的代码放到我的存档文件夹中。
另外,请记住,这是数据结构的一个示例。它并不能完全反映我的代码的外观,并且是为了便于理解和阅读。
如果需要更多信息,请不吝提问。
问题:为什么人人都不这样做? –
关于属性数组。我想我会用一个指向正确索引或指针的枚举(我不知道)。然后,我将更改属性获取并设置为使用该枚举。该数组现在将成为唯一包含现在集中信息的地方,这些信息是按值分配工作的。我可能会使用Xml序列化来保存数据。感谢大家。 – user1801742