C# Проблема области действия статического метода
У меня проблема с вызовом статического метода в статическом классе. Я хотел бы иметь очень простую оболочку журнала с использованием 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);
}
}
}
однако кажется, что когда я ссылаюсь на проект с указанным выше классом, сам класс видим, но отладка или любые другие методы больше не видны. Я рассмотрел использование экземпляра, однако предпочел бы, чтобы он не требовал экземпляра. Аналогичным образом я рассмотрел потенциальные проблемы с областью действия со статическими классами, однако класс журнала фактически виден, а открытые статические методы, содержащиеся в классе 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 ответ
Вы, кажется, звоните Log.Debug
Метод в определении класса. Что (что интересно для меня в любом случае) не работает, вам нужно переместить его в метод класса:
class Program
{
//doesn't work
Log.Debug("");
static void Main(string[] args)
{
//works
Log.Debug("Hello World!");
}
}
Надеюсь это поможет