动态加载,最基本用到的就是反射机制。在System.Reflection的namespace下有一系列的关于获取Assembly信息、类(型)信息的类、接口、结构等。可能上面的话对急切想实现动态加载控件的朋友来说可能一点用也没有,那么就看下面的代码吧,也许可以使你马上实现你想要的:

                    //加载控件
                    Assembly   assembly   =   Assembly.LoadFrom(@ "C:\Controls.dll ");
                      //获得类(型)
                      Type   type   =   assembly.GetType( "Controls.UserControl ",false,true);
                      //设置筛选标志
                      BindingFlags   bflags   =   BindingFlags.DeclaredOnly   |   BindingFlags.Public  
                                                                                                              |   BindingFlags.NonPublic   |   BindingFlags.Instance;
                      //调用构造函数并获得对象
                      Object   obj   =   type.InvokeMember( "UserControl ",   bflags   |   BindingFlags.CreateInstance,   null,   null,   null);
                      //将对象转换类型
                      System.Windows.Forms.Control   c   =   (Control)obj;
                      //将控件添加到窗体
                      this.Controls.Add(c);


下面对上面程序段用到的一些变量、方法做一点说明
1、BindingFlags,枚举类型
      BindingFlags.Instance                                         :   对象实例
      BindingFlags.Static                                                   :   静态成员  
      BindingFlags.Public                                                 :   指可在搜索中包含公共成员
      BindingFlags.NonPublic                                 :   指可在搜索中包含非公共成员(即私有成员和受保护的成员)
      BindingFlags.FlattenHierarchy           :   指可包含层次结构上的静态成员
      BindingFlags.IgnoreCase                             :   表示忽略   name   的大小写
      BindingFlags.DeclaredOnly                     :   仅搜索   Type   上声明的成员,而不搜索被简单继承的成员
      BindingFlags.CreateInstance               :   表示调用构造函数。忽略   name。对其他调用标志无效

2、Type.InvokeMember
public   object   InvokeMember(
      string   name,
      BindingFlags   invokeAttr,
      Binder   binder,
      object   target,
      object[]   args
);
参数
            name  
                String,它包含要调用的构造函数、方法、属性或字段成员的名称。  
                -   或   -  
                空字符串   ( " "),表示调用默认成员。  
        invokeAttr  
                      一个位屏蔽,由一个或多个指定搜索执行方式的   BindingFlags   组成。     访问可以是   BindingFlags   之一,如Public、   NonPublic、Private、     InvokeMethod   和   GetField   等。不需要指定查找类型。如果省略查找类型,     则将应用   BindingFlags.Public   |   BindingFlags.Instance。
            binder
                  一个   Binder   对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、   强制参数类型和通过反射调用成   员。       -   或   -       若为空引用(Visual   Basic   中为   Nothing),则使用   DefaultBinder。  
          target  
                  要在其上调用指定成员的   Object。  
        args  
                  包含传递给要调用的成员的参数的数组。  
      返回值
                  表示被调用成员的返回值的   Object。
posted on 2012-04-20 23:13  技术绝杀  阅读(484)  评论(0编辑  收藏  举报