c#中的面向对象问题
本文关键字:问题 面向对象 | 更新日期: 2023-09-27 18:21:29
我需要知道一种有效的方法来一次处理一个对象,以便在没有开关的情况下控制这三个类中的一个。(知道任何时候的对象类型)
注意: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;
}
}
正如我所看到的,您只想编写用户命令处理程序。
没有什么大问题。只需制作一个字典(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(...)
)