我理解的反射简单来说就是从程序集中加载类型,然后进行相应的操作。.net 类库对应的命名空间为 System.Reflection。下面是示例代码:

Assembly asm = Assembly.LoadFile(asmFilePath);
Type[] types 
= asm.GetTypes();
foreach (Type t in types)
{
 
if(t.IsClass && t.GetInterface(interfaceName) != null)
 
{
  
// do you work here
 }

}

上面的代码先从 asmFilePath 里指定的程序集路径下加载 (可以是 .exe 或 .dll),然后取得所有的类型。依次判断是否是你想要的某个接口的实现类。如果是,则执行相应的操作。

反射技术我目前知道的应用是:

  1. 能让你的程序动态的加载其它的组件而无须重新编译
  2. 在在传统的设计模式里很多可以与反射技术组合,形成更加简单的结构并改进耦合性。比如在工厂里,你可以根据配置文件来决定从哪个文件里加载,加载何种类型,并创建相应的实例。使得工厂的结构极大的简化。反射工厂在 .net 里几乎已经取代了传统的多子类的工厂。