У меня есть пример кода, подобный этому:
public class SimpleLogger
{
private static SimpleLogger logger;
private string path = null;
protected SimpleLogger(string path)
{
this.path = path;
}
public static SimpleLogger Instance(string path)
{
if (logger == null)
{
logger = new SimpleLogger(path);
}
return logger;
}
public static void Info(string info)
{
string path = $"{logger.path}{DateTime.Now.ToShortDateString()}_Info.txt";
using (StreamWriter writer = new StreamWriter(path))
{
writer.WriteLine($"{DateTime.Now} - {info}");
}
}
}
и когда я звоню:
SimpleLogger.Instance("path").Info("info");
Ошибка:
к члену нельзя получить доступ с помощью ссылки на экземпляр, квалифицируйте его как имя типа вместо статического метода
Но я действительно использую имя типа, не так ли?
Но когда я называю это так:
SimpleLogger.Instance("path");
SimpleLogger.Info("info");
это на самом деле работает нормально.
Чтобы он работал встроенным, я должен сделать метод Info нестатичным, а затем встроенный вызов также работает нормально. Это почему? Я не понимаю механизм здесь. Может кто-нибудь объяснить? Это потому, что метод Instance возвращает объект SimpleLogger, а затем информация должна быть нестатической, чтобы иметь возможность работать с экземпляром, а не над типом?