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

问题描述

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

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

标签: c#staticsingleton

解决方案


和你写的完全一样。您在类上调用静态方法,不能在对象上调用它们,并且您的Instance方法返回SimpleLogger类的具体对象。如果要链接方法(即。SimpleLogger.Instance("path").Info("info");),则必须更改Info(string info)为非静态类。让这些方法是非静态的更有意义,并使类成为Singleton


推荐阅读