C#类索引器方法调用(日志)

时间:2014-05-30 09:57:18

标签: c# logging methods delegates indexer

我正在尝试实施自己的日志记录解决方案。一切都很好,除了一件事,只是不想解决。 我有一个类(Log),它有登录文件等的方法。 我可以像Log.Debug(message,args)一样使用它,但这对我来说还不够。

可悲的是,在C#中,我们不能重载调用操作符,以便能够执行诸如Log(message,args)之类的操作。 因此,我在网上搜索并发现了索引器。 我的想法现在就是做:

Log [loggingMode](message,args)。

但我无法让它发挥作用。我目前有委托,方法和索引器,如下所示:

    /// <summary>
    /// Delegate for logging function, used by the indexer.
    /// </summary>
    /// <param name="mode">The logging mode.</param>
    /// <param name="message">The message to log.</param>
    /// <param name="args">The args for the message (String.Format).</param>
    public delegate void LogDelegate(string mode, string message, params object[] args);

    public LogDelegate this[string mode]
    {
        get
        {
            return LogIndexer;
        }
    }

    public void LogIndexer(string mode, string message, params object[] args)
    {
        lock (_Lock)
        {
            _queue.Enqueue(new LogEntry(String.Format(message, args), mode));
        }
    }

现在我的问题是,如何将索引器(模式)的一个参数传递给函数,以便我可以这样调用它:

日志&#34;调试&#34 ;;

1 个答案:

答案 0 :(得分:0)

this[string mode] getter应使用其mode参数以此模式返回lambda:

public delegate void LogDelegate(string message, params object[] args);

public LogDelegate this[string mode]
{
    get
    {
        return (message, args) => LogIndexer(mode, message, args); 
    }
}