0

次のようなログ関数を使用して ac# ライブラリを作成したい:

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() を使用して、必要に応じて関数を変更することです。

カスタム関数を表すデリゲートとして 3 番目のパラメーター (フォーマットの前) を使用することを考えていましたが、その方法がわかりません。

4

1 に答える 1

1

デリゲートを使用して、次のように記述します。

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

後者はパラメーター配列(キーワードで示される)であるため、パラメーターをパラメーターのに置くことはできないことに注意してください。パラメーター配列は、宣言の最後のパラメーターとしてのみ表示できます。argsparams

または、クラスのインスタンスを作成するときにアクションを設定することもできます。

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);
    }
}
于 2012-04-23T06:10:16.217 に答える