c#中面向对象的问题

时间:2013-07-08 21:58:32

标签: c# object

我需要知道一种有效的方法来处理一个对象,以便在没有切换的情况下控制这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;
                    }
             }

1 个答案:

答案 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(...)