这是布局
House -> HouseDef -> Room -> Door
L---> Windows
问题在于,任何类都可能具有或未具有像HouseDefinition这样的列表和嵌套类。关键是应该灵活地处理以下三种情况的类变化: 1. hasList, 2. hasNestedObject,该嵌套对象中包含List 3.既没有列表类也没有嵌套类
示例1是包含窗口列表的Room类 2个类似房屋类的示例 像窗口类一样的3的示例
我有这两个类,我想从另一个类中进行一般访问。我希望能够通过访问作为MyTreeNode中的对象存储的House类来获取House Definition中的Rooms List。我该如何不受类型或多态性的约束,以便将来支持更深层次的层次?
public class House
{
string name;
HouseDefinition definition;
public string Name() { return name; }
public HouseDefinition Definition {get {return definition;}}
public House(string name,HouseDefinition definition)
{
this.name = name;
this.definition = definition;
}
}
public class HouseDefinition
{
private List<Room> rooms = new List<Room>();
string type;
public List<Room> Rooms { get { return rooms; } }
public Room this[int i] { get { return rooms[i]; } }
public HouseDefinition(string type)
{
DefaultLayout();
this.type = type;
}
}
public class MyTreeNode : TreeNode
{
string label;
IEnumerable items;
bool hasList;
object item;
public string Label { get {return label; } }
public IEnumerable Items { get { return items;} }
public object Item { get { return item; } }
public bool HasList { get { return hasList; } }
public MyTreeNode(object item)
{
this.item = item;
label = item.ToString();
hasList = false;
}
public MyTreeNode(object item, IEnumerable Items)
{
this.item = item;
label = item.ToString();
hasList = true;
}
}
答案 0 :(得分:0)
我认为您的班级看起来不错,但是我将删除HouseDefinition
,因为这些属性对我来说就像House
。如果要练习继承,则可以创建一个IBuilding
接口,以强制House
,Mansion
,Shack
实现GetRooms()或类似的方法。其他几件事:
TreeNode
类应该像public MyTreeNode(T item)
一样使用generic types public object Item { get { return item; } }
祝您好运,到目前为止您的代码看起来还不错!