无法将单例类转换为接口

时间:2010-11-09 11:10:24

标签: c# interface casting singleton

我有一个Logger类,它实现了单例。该类很简单,只有很少的方法和一个static属性Instance。像所有单例类一样,我通过Logger.Instance属性访问唯一实例。

我从Logger类中提取了一个接口(使用Visual Studio重构上下文菜单)。提取后,接口包含这些少数方法的签名,并且由于Instance属性为static,因此它不包含在ILogger接口中。

完成所有这些后,我无法在运行时将Logger.Instance投射到ILogger。我的方法出了什么问题?

2 个答案:

答案 0 :(得分:3)

您是否确实声明Logger实施了ILogger

public sealed class Logger : ILogger
{
    ...
}

如果是这样,应该没问题。请发布一些代码,以便我们尝试诊断问题。

如果没有,那就是问题,并且很容易解决:)

答案 1 :(得分:1)

你描述的例子对我来说很好。我做了一个小例子,也许你看到了一些不同之处:

class Program
{
    static void Main(string[] args)
    {
        ILogger logger = Logger.GetLogger();
        logger.LogMessage("Hello");
    }
}

public interface ILogger
{
    void LogMessage(string message);
}

public class Logger : ILogger
{
    private static Logger instance;

    public static Logger GetLogger()
    {
        return instance ?? (instance = new Logger());
    }

    public void LogMessage(string message)
    {
        Console.WriteLine(message);
    }
}