彩票走势图

如何动态加载控件以及插件编程思想

转帖|其它|编辑:郝浩|2011-10-17 17:17:41.000|阅读 484 次

概述:控件在实现快速开发中起着非常重要的作用,它可以将某一特定功能封装起来,供可户程序员调用,更重要的是它还可以实现插件式开发,使软件的灵活性、可扩充 性大大增强。在网络上,也有很多动态加载控件、动态调用类成员等的资料。下面,我就将动态加载控件总结一下,以供大家参考。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  控件在实现快速开发中起着非常重要的作用,它可以将某一特定功能封装起来,供可户程序员调用,更重要的是它还可以实现插件式开发,使软件的灵活性、可扩充 性大大增强。在网络上,也有很多动态加载控件、动态调用类成员等的资料。下面,我就将动态加载控件总结一下,以供大家参考。

一、动态加载控件

       动态加载,最基本用到的就是反射机制。在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。

二、插件编程

  通过上面代码段,我们基本实现动态加载控件。由此我想到了现在网上提到很多的插件式的开发方法。通过动态加载控件,我们不是能很方便的为软件扩充功能 吗?我不知道Eclipse这种插件是怎么实现的,但至少这种动态加载控件的方法实现插件编程的一个变通的方法。不是吗?我把一个功能模块做成一个控件, 然后在程序启动是扫描目录,即可获得所有的控件,当点击菜单是,将控件加载到窗体就行了。我在母体程序里,我们所要做的只不过要一个容器窗口类来加载控 件。当然,事先要有些约定,比如说,控件有哪些可供调用的方法等等。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP