我有一个这样的示例代码:
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}");
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我打电话时:
SimpleLogger.Instance("path").Info("info");
Run Code Online (Sandbox Code Playgroud)
出现错误:
无法使用实例引用访问成员,请使用类型名称而不是静态方法对其进行限定
但我确实使用了类型名称,不是吗?
但是当我这样称呼它时:
SimpleLogger.Instance("path");
SimpleLogger.Info("info");
Run Code Online (Sandbox Code Playgroud)
它实际上工作得很好。
为了使其内联工作,我必须使 Info 方法成为非静态,然后内联调用也可以正常工作。这是为什么?我不明白这里的机制。有人可以解释一下吗?是因为 Instance 方法返回 SimpleLogger 对象,然后信息需要是非静态的才能在实例而不是类型上工作吗?