2013-07-08 79 views
1

我需要知道一種有效的方法來處理一個對象,以便在沒有開關的情況下控制這3個類中的一個。 (瞭解任意點的對象類型)c中的面向對象問題#

注意: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

你試圖處理什麼?圖形類型? AddVertex是一種靜態方法嗎? – Sayse

+0

是的,圖形類型,不,它不是一個靜態方法。 –

回答

4

正如我所看到的,您只是想編寫用戶命令處理程序。

沒有什麼大問題。只需創建一個字典(var GraphsType - > Graph)。

var dictionary = new Dictionary<GraphsType, Graph>() { 
    { GraphsType.None, GraphObject }, 
    { GraphsType.UndirectedGraph, UndirectedGraphObject }, 
    { GraphsType.DirectedGraph, DirectedGraphObject }, 
}; 

並使用它:

dictionary[GraphType].AddVertex(v); 

如果你的圖形,UndirectedGraph,將DirectedGraph是靜態類,你必須在字典中保存它的發現方法和調用類型(typeof(Graph)),然後使用類型反射它(dictionary[GraphType].GetMethod(..).Invoke(...)

+0

Woot它的工作,非常感謝你,我真的很感謝你的幫助! –

+0

Np。那麼,實際上,你甚至可以在Actions和MethodNames之間製作字典,然後用反射來調用它。 –