c#静态方法范围问题

时间:2018-02-10 08:28:05

标签: c# singleton

我在静态类中调用静态方法时遇到问题。我希望有一个非常简单的使用NLog的日志包装器,我在其中调用Log.warn等:

using NLog;
using NLog.Config;
using NLog.Targets;

namespace Test.Logger
{
  public static class Log
  {
    private static readonly ILogger logger = LogManager.GetCurrentClassLogger();

    static Log()
    {
        logger = LogManager.GetCurrentClassLogger();
    }


    public static void Debug(string message)
    {
        logger.Log(LogLevel.Debug, message);
    }

  }

}

然而,当我使用上面的类引用一个项目时,类本身是可见的,但Debug或任何其他方法不再可见。我已经研究了实例的使用,但是更喜欢它不需要实例。同样地,我研究了静态类的潜在范围问题,但是日志类实际上是可见的,只是Log类中包含的公共静态方法不是。

这就是我试图调用方法的方法:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using Test.Logger;

namespace WpfTestApp
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        Test.Logger.Log.Debug("test message");
        //this method cannot be found, however Test.Logger.Log can
    }
}

1 个答案:

答案 0 :(得分:1)

您似乎在类定义中调用Log.Debug方法。哪个(有趣的是对我来说)不起作用,你需要在类方法中移动它:

class Program
{
    //doesn't work
    Log.Debug("");



    static void Main(string[] args)
    {
        //works
        Log.Debug("Hello World!");
    }
}

希望这有帮助