这么两种用法区别在哪里其一:Assembly asm =Assembly.GetExecutingAssembly()
     //实例化。
     object obj = asm.CreateInstance("类名",true);
     //然后调用方法。
     Type t = typeof(类名);
     t.invokememeber()
其二:类型名 testclass = Activator.CreateInstance(type) as 类型名;
    //调用;
    就可以像实例化普通对象一样调用。如
     testxlass.Add()//调用方法

解决方案 »

  1.   

    啥意思,非哥。
    我咋感觉更习惯性的用第二种。
    因为第一种要传那些什么bind bindingflag什么的,
    要是方法有参数还要传参数什么的,麻烦。
      

  2.   

    既然知道类型名 为什么不实例化一个指定类型的对象呢类型名 testclass = Activator.CreateInstance(type) as 类型名;=》类型名 testclass = new 类型名();or类型名 testclass = 类型名.CreateInstance();
      

  3.   

    不算,因为代码已经将类型硬性规定了。类型名 testclass = Activator.CreateInstance(type) as 类型名;也不算,因为类型也已经写死了。
      

  4.   

    虽然知道类型名,可是引用的时候只有一个dll,所以通过反射创建出类型, 然后再去调用类型的成员可是非哥你9楼给出的那些方法显然是不行的但是这种方法其二:类型名 testclass = Activator.CreateInstance(type) as 类型名;
        //调用;
        就可以像实例化普通对象一样调用。如
         testxlass.Add()//调用方法
    是可行的
      

  5.   

    一般用第一种吧因为,第一种的type是一个普通的字符串
    可以动态在程序运行中获取到字符串,然后转换成类对象而第二种的type,是在编译时就必须得到的
      

  6.   

    虽然知道类型名,可是引用的时候只有一个dll,所以通过反射创建出类型, 然后再去调用类型的成员--------------------------------------------------------------------------------
    如果dll 在引用的情况下 那你是可以知道相关类型的反之不引用的情况下,通过 Assembly.LoadFile 然后在 CreateInstance 是可以的这样是 类型名 Instance = new 类型名(); 所不行的
      

  7.   

    非哥,_RdbDataProvider = (RdbDataProvider)Activator.CreateInstance(BuildManager.GetType(rdbDataProviderType, true, true), null);这种和我帖子内容里第二种方法有什么区别?
      

  8.   

    BuildManager.GetType(rdbDataProviderType, true, true)我想知道的是这里,非哥
    MSDN讲得很简单。
    一个例子都没有。
      

  9.   

    BuildManager.GetType 能够解决 跨 Assembly (程序集) 时 容易产生的找不到类型的问题
      

  10.   

    第一种方法最终还是调用第二中方法,相当于
    Type type = asm.GetType("类名", false, true);
    object obj = Activator.CreateInstance(type, BindingFlags.Public | BindingFlags.Instance,
        null, null, null, null);
      

  11.   

    两者本质上是没有区别的。最终是调用Activator.CreateInstance方法创建的实例。