Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
抽象工厂错误CS0246 C#.NET_C#_Design Patterns_Factory_Cs0246 - Fatal编程技术网

抽象工厂错误CS0246 C#.NET

抽象工厂错误CS0246 C#.NET,c#,design-patterns,factory,cs0246,C#,Design Patterns,Factory,Cs0246,我有一个独立类的工作项目,比如calcs、串口等。。并希望将它们封装到dll中,以便在其他类似项目中使用。我正在尝试实现一个工厂,首先是一个串口工厂,这样我就可以在多个DLL之间使用。这是我第一次阅读大量教程,并从以下示例开始: 虽然它工作得很好,但我想将FileLogger移到它自己的类中,所以我已经尝试了一段时间,但需要朝正确的方向轻推吗 using System; using System.Collections.Generic; using System.Linq; using Sys

我有一个独立类的工作项目,比如calcs、串口等。。并希望将它们封装到dll中,以便在其他类似项目中使用。我正在尝试实现一个工厂,首先是一个串口工厂,这样我就可以在多个DLL之间使用。这是我第一次阅读大量教程,并从以下示例开始:

虽然它工作得很好,但我想将FileLogger移到它自己的类中,所以我已经尝试了一段时间,但需要朝正确的方向轻推吗

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FactoryPatternSample
{

    interface ILogger
    {
        void Log(string Message);
    }

    enum LoggerType
    {
        File,
        Database,
        EventViewer
    }

    public class File 
    {
        public class FileLogger : ILogger
        {
            public void Log(string Message)
            {
                Console.WriteLine("{0} - Logged in File.", Message);
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FactoryPatternSample
{
    class Program
    {
        File.FileLogger flogger = new File.FileLogger();

        interface ILogger
        {
            void Log(string Message);
        }

        enum LoggerType
        {
            File,
            Database,
            EventViewer
        }



        class DatabaseLogger : ILogger
        {
            public void Log(string Message)
            {
                Console.WriteLine("{0} - Logged in Database.", Message);
            }
        }

        class EventViewerLogger : ILogger
        {
            public void Log(string Message)
            {
                Console.WriteLine("{0} - Logged in EventViewer.", Message);
            }
        }

        class LoggerFactory
        {
            public static ILogger Get(LoggerType type)
            {
                switch (type)
                {
                    case LoggerType.Database:
                        return new DatabaseLogger();
                    case LoggerType.EventViewer:
                        return new EventViewerLogger();
                    case LoggerType.File:
                    default:
                        return new flogger();
                }
            }
        }

        static void Main(string[] args)
        {
            ILogger logger1 = LoggerFactory.Get(LoggerType.Database);
            logger1.Log("Message from Main");

            ILogger logger2 = LoggerFactory.Get(LoggerType.File);
            logger2.Log("Message from Main");

            ILogger logger3 = LoggerFactory.Get(LoggerType.EventViewer);
            logger3.Log("Message from Main");

            Console.ReadKey();

            /*Output
            Message from Main - Logged in Database.
            Message from Main - Logged in File.
            Message from Main - Logged in EventViewer.
            */
        }
    }
}
此位是导致问题的原因:

return new flogger();
这就是错误:

错误CS0246找不到类型或命名空间名称“flogger”(是否缺少using指令或程序集引用?)


我只是无法将其转到reference File.FileLogger,请帮助?

解决,一旦我删除:

interface ILogger
{
    void Log(string Message);
}

从program类开始,结束了,现在开始工作,因为我有两个接口,它是
new File.FileLogger()
,正如您在初始化字段的行中所做的:
File.FileLogger flogger=new File.FileLogger()
是要返回
FileLogger
的新实例,还是要在
flogger
变量中返回现有实例?正如蒂姆·施梅尔特(Tim Schmelter)所说,要么
return flogger
返回新文件.FileLogger()使用“return flogger”表示感谢;我收到错误CS0120非静态字段、方法或属性“Program.flogger”或使用return new“File.FileLogger();”表示需要对象引用出现错误CS0266,无法将类型“FactoryPatternSample.File.FileLogger”隐式转换为“FactoryPatternSample.Program.ILogger”。存在显式转换(是否缺少强制转换?)