我有一種情況,我覺得我做錯了什麼,我懷疑有更多的方法可以做到。當成員與另一個類的公共變量相同時使用Enum
我有一些變量的類:
public class Structure {
public float size;
public float pos_x;
public float pos_y;
public float pos_z;
}
我必須跟這些構件,其是完全一樣的上述領域的枚舉:
public enum StructureProperty {
SIZE,
POS_X,
POS_Y,
POS_Z,
}
我有AnotherClass需要存儲單個StructureProperty及其關聯的值。
public class AnotherClass {
public StructureProperty property;
public float value;
public float ID;
public float parentID;
..some methods and things
}
我有抓住這個其他類,並期待看到使用枚舉來更新其屬性的方法:
void UpdateStructure (AnotherClass anotherClassInstance) {
switch (anotherClassInstance.property) {
case StructureProperty.SIZE:
Structure.size += anotherClassInstance.value;
break;
... for all other cases
but the logic might be different
(not always +=, sometimes several lines)
}
這種方法需要進行檢查,看在結構上要更新的屬性,然後更新它。我覺得我可能會在這裏打破某種面向對象的方法,因爲我需要在Structure中維護一個枚舉列表和一個變量列表。請注意,我預計在構建程序時經常添加和刪除屬性。希望有人能引導我以正確的方式讓這個代碼更具前瞻性。
我在c#編程,但我認爲這個問題適用於所有主要的OO編程語言。
感謝。
不是很清楚你想要做什麼...也許使用更新特定屬性而不是枚舉值的代理集可以工作。從原始CPU速度的角度來看,這種方法的效率明顯低於對結構字段的直接操作,但至少具有更多的可擴展性。如果使用它,請注意複製的結構 - 您可能需要在任何地方撒上'ref'。 –
謝謝,我怎樣才能更清楚我想做什麼?我可以更新這個問題,我只是想知道什麼是不明確的。我會查看結構字段,以前從未使用它們。 –
問題在於您描述了代碼的功能,但不是您想要實現的功能 - 所以建議僅限於對您所擁有的內容進行微小更改,而不是您可能要查找的實際問題的其他方法。 –