Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将单例类强制转换为接口_C#_Interface_Casting_Singleton - Fatal编程技术网

C# 无法将单例类强制转换为接口

C# 无法将单例类强制转换为接口,c#,interface,casting,singleton,C#,Interface,Casting,Singleton,我有一个Logger类,它是单例实现的。这个类很简单,方法也很少,只有一个静态属性,实例。与所有单例类一样,我通过Logger.instance属性访问唯一实例 我从Logger类中提取了一个接口(使用VisualStudio重构上下文菜单)。提取后,接口包含这几个方法的签名,并且由于实例属性是静态,因此它不包括在ILogger接口中 所有这些之后,我无法在运行时将Logger.Instance转换为ILogger。我的方法有什么问题?您是否真的声明了Logger实现了ILogger publi

我有一个
Logger
类,它是单例实现的。这个类很简单,方法也很少,只有一个
静态
属性,
实例
。与所有单例类一样,我通过
Logger.instance
属性访问唯一实例

我从
Logger
类中提取了一个接口(使用VisualStudio重构上下文菜单)。提取后,接口包含这几个方法的签名,并且由于
实例
属性是
静态
,因此它不包括在
ILogger
接口中


所有这些之后,我无法在运行时将
Logger.Instance
转换为
ILogger
。我的方法有什么问题?

您是否真的声明了
Logger
实现了
ILogger

public sealed class Logger : ILogger
{
    ...
}
如果是这样的话,应该没问题。请发布一些代码,以便我们可以尝试诊断问题


如果没有,这就是问题所在,而且很容易解决:)

您是否真的声明了
Logger
实现了
ILogger

public sealed class Logger : ILogger
{
    ...
}
如果是这样的话,应该没问题。请发布一些代码,以便我们可以尝试诊断问题


如果没有,这就是问题所在,而且很容易解决:)

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

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);
    }
}

你描述的例子对我很有用。我举了一个小例子,也许你看到了一些不同:

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);
    }
}

你得到的异常是什么?关键是,因为我在编写记录器之后提取了接口,所以我忘记了通过记录器实现接口。我的意思是,我一开始并没有被计划好。希望这会有所帮助。您会遇到什么异常?问题是,因为我在编写记录器之后提取了接口,所以忘记了通过记录器实现接口。我的意思是,我一开始并没有被计划好。希望这有帮助。猜猜常见错误是一种智慧。谢谢。猜猜常见的错误是什么是一种智慧。谢谢