List <Module> list=new List <Module>(); 
list.Add((Module)Activator.CreateInstance(typeof(Module)));//--> 这个是正确的 
//-----错误代码如下------ 
Assembly assembly=Assembly.LoadFile("bin/module.dll"); 
Type[] types=assembly.GetTypes(); 
int i; 
for(i=0;i <types.Lenght;i++) 

   if(types[i].Name=="Module") 
   { 
     list.Add(((Module)Activator.CreateInstance(types[i]))); 
     //---> 这里创建的实例,虽然不会报语法错误,但执行起来不正常 
      //我设置断点看到   list.Count=1;list中有一个实例存在 
    } 
} 也就是说 Activator.CreateInstance(typeof());这样的是正确的,执行起来没任何问题。
但是 Activator.CreateInstance(Assembly.GetTypes());--->用Assembly.GetTypes()出来的type,建立实例以后会出现问题。我反复测试过。Assembly.GetTypes()出来的Type是有问题的。不知道为何。谁能解释一下。

解决方案 »

  1.   

    Assembly assembly=Assembly.LoadFile("bin/module.dll"); 
    Type[] types=assembly.GetTypes(); 
    int i; 
    for(i=0;i <types.Lenght;i++) 

       if(types[i].Name=="Module") //只加入name==module的type
       { 
         list.Add(((Module)Activator.CreateInstance(types[i]))); 
         //---> 这里创建的实例,虽然不会报语法错误,但执行起来不正常 
          //我设置断点看到   list.Count=1;list中有一个实例存在 
        } 
    } list 中当然只有一个实例了
      

  2.   

    问题是这样的,在Module.Add(types[i])的是时候是正常的,里面有个实例如果用 list.Add(((Module)Activator.CreateInstance(types[i])));,将会出现以下问题。//入口
    static Main()
    {
       App.Init();
    }public static App
    {
        public List<IModule> Modules;
        public static void Init()
        {
           //实例化泛
           Modules=new List<IModule>();       //反射开始
           Assembly assembly=Assembly.LoadFile("bin/module.dll");
           Type[] types=assembly.GetTypes();
           int i;
           for(i=0;i<types.Lenght;i++)
           {
              //从IModule继承的,放入泛
              if(IsModule(types[i])==true)
              {
                 Modules.Add(((IModule)Activator.CreateInstance(type[i])));
              }
           }
           //加载完毕,运行
            int index=IndexOf("m0");
            Modules[index].Run();//---->执行的是Module0.Run(),此操作是正常的
           //此时Module0.Run()调用Module30.Run()
           //此时问题出现了,Modules=null了。
            //整个App参数下的数据成员全部为null
           //包括下面那个abc,也是空的
            //错误就出在这里,大家帮我看看是怎么回事
           
        }
        static string abc="abc";    public int IndexOf(string name)
        {
          int i,index;
          index=-1;
          for(i=0;i<Modules.Count;i++)
          {
             if(Modules[i].Name==name)
             {
                index=i;
                break;
             }
          }
          return index;
        }     //返回类型是否符合IModule接口
     static bool IsModule(Type type)
     {
      //获取所有接口
      Type[] interfaces = type.GetInterfaces();
      int i;
      bool has = false;
      for (i = 0; i < interfaces.Length; i++)
      {
         //如果有接口为模块接口
          if (interfaces[i] == typeof(IModule))
         {
           has = true;
           break;
         }
       }
       return has;
     }
    }public class Module0:IModule
    {
        public string Name
        {
           return "m0";
        }    public void Run()
        {
            int index=App.IndexOf("m30");
            App.Modules[index].Run();
        }   
    }public class Module30:IModule
    {
        public string name
        {
           return "m30";
        }    //方法为空
        public void Run(){}
    }public class Module1---29...//这些都和Module30相同
    public interface IModule
    {
        string Name{get;}
        void Run();
    }