【问题标题】:Abstract Factory Error CS0246 C# .NET抽象工厂错误 CS0246 C# .NET
【发布时间】:2017-12-07 13:11:42
【问题描述】:

我有一个工作项目,其中包含用于计算、串行端口等的单独类,并希望将它们封装到 dll 中以用于其他类似项目。我正在尝试实现一个工厂,首先是一个串口工厂,所以我可以在多个 dll 之间使用。这是我第一次阅读大量教程并开始使用这个示例:

https://www.codeproject.com/articles/1075518/learning-factory-pattern-using-csharp

哪个效果很好,但我想将 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 指令或程序集引用?)

我无法让它引用 File.FileLogger,请帮忙?

【问题讨论】:

  • 嗯,它是 new File.FileLogger(),正如您在初始化字段的行中所做的那样:File.FileLogger flogger = new File.FileLogger();
  • 您要返回FileLogger 的新实例,还是要返回flogger 变量中的现有实例?这是一个或另一个。
  • 正如 Tim Schmelter 所说,return flogger;return new File.FileLogger();
  • 感谢“return flogger;”我收到错误 CS0120 非静态字段、方法或属性“Program.flogger”需要对象引用
  • 或返回 new 'File.FileLogger();'我收到错误 CS0266 无法将类型“FactoryPatternSample.File.FileLogger”隐式转换为“FactoryPatternSample.Program.ILogger”。存在显式转换(您是否缺少演员表?)

标签: c# design-patterns factory cs0246


【解决方案1】:

解决了,一旦我删除了:

interface ILogger
{
    void Log(string Message);
}

从程序类结束,它现在可以工作了,因为我有两个接口

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多