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;
                    }
             }

c#中的面向对象问题

正如我所看到的,您只想编写用户命令处理程序。

没有什么大问题。只需制作一个字典(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(...)