【问题标题】:How to use Reflection instead of switch case - C# [closed]如何使用反射而不是开关盒 - C# [关闭]
【发布时间】:2014-05-26 10:44:14
【问题描述】:

由于缺少信息,我已经编辑了我之前的问题。

我编写了一个名为 ReaderFactory 的类,我在其中创建了一个方法 GetAReader(string filename)。此方法使用其文件扩展名返回一个阅读器。我使用 switch-case 来选择特定的阅读器。但是我的导师建议我使用反射而不是 switch-case。我已经开始学习反射并陷入了它的行为。如何在我的代码中实现反射而不是 switch-case? GetAReader 方法如下:

 
        public static IReader GetAReader(string _fileName)
        {
            fileName = _fileName;
            fileExtension = Path.GetExtension(fileName);

        switch (fileExtension) 
        {
            case ".txt":
                     TextFileReader _textReader = new TextFileReader(fileName);
                         _textReader.ReadData();
                      return _textReader;

            case ".pdf":
                         PDFReader _pdfReader = new PDFReader(fileName);
                         _pdfReader.ReadData();
                         return _pdfReader;
            case ".doc":
                        //reader initialize
            case ".rtf":
                         //reader initialize
            case ".docx":
                        //reader initialize
            case ".jpg":
                        //reader initialize


        }

        return null;
    }

【问题讨论】:

标签: c# reflection switch-statement


【解决方案1】:

反射是非常复杂的东西,但可以用于各种各样的事情。 一些例子:

  • 通过指定名称读取属性。
  • 加载程序集并获取它的所有类型。
  • 读取属性

简而言之,通过反射,您可以将任何 .NET 代码反编译为 C#/VB 或任何其他 IL 语言。

我建议你看看 Telerik 的反编译器(这是一个让你查看 dll 源代码的工具)。比你知道什么是反射。

Alo,这里有一些文档可以帮助您入门:http://msdn.microsoft.com/en-us/library/f7ykdhsy.aspx

【讨论】:

  • 我编辑了我的问题。你能详细说明这些问题吗?
  • 不要理解错了,但是关于Reflection的文章已经很多了。你能解释一下你为什么需要它吗?我问这个是因为反射非常昂贵,如果有一个内置的 .NET 解决方案,那可能会快得多。我会给你你需要的解释,但我只是想避免你使用需要不需要资源的代码。
  • 我写了一个名为 Reader 的类。我使用 switch-case 来选择文件扩展名。由于文件类型很多,我的导师建议我使用反射而不是 switch-case。我开始阅读关于反射并卡在动态加载程序集文件上。所以你能解释一下我如何使用反射而不是 switch-case?
  • 但我在网上浏览了一下,发现了 StackOverflow 上的这篇文章。 stackoverflow.com/questions/4234421/… 这是一个讨论,看看什么是更快的切换或反射。切换总是会更快,但也许阅读那篇文章是个好主意。如果您有任何其他问题,请随时回来。
  • 感谢您的帮助 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多