2012-04-23 39 views
0

我想創建一個C#庫,像這樣的日誌功能:如何通過不同的功能發送文本?

class MyLogClass 
{ 
    public void log(string format, params object[] args) 
    { 

     string message = string.Format(format, args); 

     // custom function 
     log_to_file(message); // or log_to_db() or log_to_txtBox() 

    } 
} 

的想法是改變功能要求,使用log_to_file(),log_to_db()或log_to_txtBox()。

我想使用第三個參數(格式之前)作爲委託來表示自定義函數,但我不知道該怎麼做。

回答

1

使用委託,你會寫這樣的:

class MyLogClass 
{ 
    public static void Log(Action<string> outputAction, string format, 
          params object[] args) 
    { 
     string message = string.Format(format, args); 
     outputAction(message); 
    } 
} 

注意,參數不能來args參數,因爲後者是參數數組(以As所指params關鍵字) - 一個參數數組只能作爲聲明中的最終參數出現。

或者,當你創建一個類的實例可以設置一個動作:

class MyLogClass 
{ 
    private readonly Action<string> outputAction; 

    public MyLogClass(Action<string> outputAction) 
    { 
     this.outputAction = outputAction; 
    } 

    public void Log(string format, params object[] args) 
    { 
     string message = string.Format(format, args); 
     outputAction(message); 
    } 
} 
+0

感謝喬恩,這正是我一直在尋找 – auraham 2012-04-23 06:14:00