小编Mik*_*ike的帖子

“无法使用实例引用访问成员,而是使用类型名称对其进行限定”并且我确实使用类型名称

我有一个这样的示例代码:

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 对象,然后信息需要是非静态的才能在实例而不是类型上工作吗?

c# singleton static

4
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×1

singleton ×1

static ×1