如何使用Reflection而不是switch case - C#

时间:2014-05-26 10:44:14

标签: c# reflection switch-statement

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

我编写了一个名为 ReaderFactory 的类,我在其中创建了一个Method GetAReader(string filename)。这个方法使用文件扩展名返回一个阅读器。我使用switch-case来选择特定的reader.But我的导师建议我使用反射而不是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; }

1 个答案:

答案 0 :(得分:4)

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

  • 通过指定名称来读取属性。
  • 加载一个组件并获取它的所有类型。
  • 读取属性

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

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

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