我需要知道一种有效的方法来处理一个对象,以便在没有切换的情况下控制这3个类中的一个。 (随时了解对象类型)
注意:方法AddVertex没有重载,因此它与父类相同。
switch (User.Action)
{
case Actions.NewVertex:
switch (GraphsType)
{
case GraphsType.None:
Graph.AddVertex(p); /*This is the parent class*/
break;
case GraphsType.UndirectedGraph:
UndirectedGraph.AddVertex(p); /*This is a derived class*/
break;
case GraphsType.DirectedGraph:
DirectedGraph.AddVertex(p); /*This is a derived class,*/
break;
}
}
答案 0 :(得分:4)
正如我所见,你只想编写用户命令处理程序。
没有大问题。只需创建一个字典(var GraphsType - > Graph)。
var dictionary = new Dictionary<GraphsType, Graph>() {
{ GraphsType.None, GraphObject },
{ GraphsType.UndirectedGraph, UndirectedGraphObject },
{ GraphsType.DirectedGraph, DirectedGraphObject },
};
并使用它:
dictionary[GraphType].AddVertex(v);
如果您的Graph,UndirectedGraph,DirectedGraph是静态类,您必须在字典中保存它的类型(typeof(Graph)
),然后在类型上使用反射来查找方法并调用它(dictionary[GraphType].GetMethod(..).Invoke(...)
)