1

スイッチなしでこの 3 つのクラスのいずれかを制御するために、一度に 1 つのオブジェクトを処理する効率的な方法を知る必要があります。(任意の時点でのオブジェクトの種類を知る)

注 : メソッド 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;
                    }
             }
4

1 に答える 1

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(...)) 。

于 2013-07-08T22:14:50.980 に答える