我希望能夠遍歷引用自己屬性的類屬性。你爲什麼會問?因爲如果我想向該類添加更多屬性,稍後管理會更容易。自引用屬性數組
讓我解釋更多:
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