자체 속성을 참조하는 클래스 속성을 반복 할 수 있기를 원합니다. 왜 물을 수 있습니까? 나중에 해당 클래스에 속성을 추가하려는 경우 나중에 관리하기가 쉽기 때문입니다. 자체 참조 속성 배열
은 좀 더 설명해 보자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