c#类索引器方法调用(log)

本文关键字:log 调用 方法 索引 | 更新日期: 2023-09-27 18:05:48

我正在尝试实现我自己的日志解决方案。一切都很好,除了一件事,就是不希望成功。我有一个类(日志),它有方法记录到文件等。我可以像使用Log一样使用它。调试(message, args),但这对我来说还不够。

遗憾的是,在c#中,我们不能重载调用操作符来做Log(message, args)之类的事情。因此,我在网上搜索并发现了有关索引器的信息。我现在的想法是这样做:

日志(loggingMode)(消息,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));
        }
    }

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

日志"调试";

c#类索引器方法调用(log)

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); 
    }
}