2014-10-13 4 views
1

대리인이 포함 된 사전을 만드는 방법을 묻고 싶습니다.대리자가있는 사전 작성

아이디어는 다음과 같습니다

  1. 명령을 저장하기 위해 "/"
  2. 사용을 사전에 의해 정의 된 콘솔 기반의 명령을 가지고 있고이 필요로하는 함수를 호출 것 델. 내가 만드는 이벤트

    delegate void CmdHandler(string[] cmdArgs); 
        class CMDReader 
        { 
    
    
         public event CmdHandler _Print; 
         public event CmdHandler _Help; 
    
         private char cmdChar; 
        } 
    
    
    cmdReader._Print += new CmdHandler(Print); 
    void Print(string[] args) 
    

    하지만 이벤트없이 관리 할 수있는 방법을 찾고 있어요에 의해 동일 할 관리 : 내가 지금까지 무엇을 가지고

. 나는 사전으로 그렇게 할 수 있다고 생각했지만 그것을하는 방법을 모르겠습니다.

+0

사전을 사용하지 않으려면 어떻게해야합니까? – svick

+0

코드에서 명확하지 않습니다. 호출 할 메소드/위임/무엇을 결정할 것인가? –

답변

2

Dictionary에 대리자를 추가 한 다음 인덱서 키 (여기에서 명령 이름으로 가정)를 사용하여 적절한 작업을 호출 할 수 있습니다. 그러나이 패턴의 문제점은 인수의 느슨한 입력 (모든 string[], 각각의 의미에 대한 묵시적 지식 포함) 및 모든 메소드의 공통 리턴 유형에 대한 제한 (현재 void)입니다.

public class CMDReader 
{ 
    delegate void CmdHandler(string[] cmdArgs); // Or Action<string[]> 

    private readonly IDictionary<string, CmdHandler> _commands; 
    public CMDReader() 
    { 
     _commands = new Dictionary<string, CmdHandler> 
     { 
      { 
       "Print", Print 
      }, 
      { 
       "Help", Help 
      }, 
     }; 
    } 

    public void InvokeCommand(string command, string[] args) 
    { 
     if (_commands.ContainsKey(command)) 
     { 
      _commands[command].Invoke(args); 
      // OR (_commands[command])(args); 
     } 
     else 
     { 
      Console.WriteLine("I don't know that command ..."); 
     } 
    } 

    private void Print(string[] args) 
    { 
     // Implementation 
    } 
    private void Help(string[] args) 
    { 
     // Implementation 
    } 
} 
+0

고마워요. 그것은 많은 도움이되었습니다! –

관련 문제