动态创建与调用 实际上映射远不止动态地获知组件的类型信息,它还能在获得类型信息的基础上,在代码运行时进行类型的动态创建与方法的动态调用,甚至动态地创建并执行IL代码! 动态调用为C#的组件提供了迟绑定功能,它使组件之间在运行时集成变得极为方便!利用前面创建的简单组件SimpleType.dll,来看一看怎样完成对象的动态创建和方法的动态调用: // DynamicExe.cs using System; using System.Reflection; class Test { public static void Main(){ Assembly a=Assembly.LoadFrom(“SimpleType.dll”); //装载组件 foreach(Type t in a.GetTypes()){ if(t.IsClass && !t.IsAbstract) { MethodInfo[] miArr= t.GetMethods(); //获得类型的公有方法 object o=Activator.CreateInstance(t); //创建实例(无参构造器) foreach(MethodInfo mi in miArr) { if(!mi.IsAbstract && !mi.IsStatic && mi.GetParameters().Length==0) { object re=mi.Invoke(o,null);//调用实例方法 Console.WriteLine(“{0} , Return :{1}”,mi.Name,re); } } } } } } 用编译命令csc /r:simpletype.dll dynamicexe.cs编译后执行,可得到下面的输出: GetHashCode, Return :8 ToString, Return :MyClass get_Count, Return :100 100 Print, Return : GetType, Return :MyClass 我们在上面的例子中给出了被动态调用的方法名字和返回值。其中输出的第四行为100,它是动态调用方法MyClass.Print() 的输出。需要指出的是调用的是类型的公有无参数实例方法。给出组件的名字,应用Assembly.LoadFrom,我们便可以动态地装载组件。Activator.CreateInstance允许动态地创建类型(这里只通过无参数的构造器来创建),实际上用它创建出来的类型和用“MyClass o=new MyClass()”创建出来的类型一样。进而,还可以在查询到的成员的基础上,对它们进行动态调用。 Microsoft.NET从底层的元数据设计入手,为映射机制提供了非常坚实的基础。命名空间System.Reflection和System.Reflection.Emit为操作这种映射提供了实实在在的强大的API编程接口,大大改善了组件的设计环境,提高了组件的交互能力! 
---------------------------摘自计算机世界报

解决方案 »

  1.   

    单纯的动态加载是不复杂,可是需要考虑到一些代码的执行(如打开数据库,mouse click 等),控件的命名,可能 不是很简单的吧
      

  2.   

    参考
    http://www.icsharpcode.net/OpenSource/SD/default.asp
     
    SharpDevelop是一个用.Net开发的.Net开发环境,
    并提供源码。
      

  3.   

    To qiujoe(迷糊):
    能具体说说你要什么功能吗? >>对于控件的命名处理和事件处理应该怎么做了,请给点思路
    没有太明白 :)
      

  4.   

    应该是源文件要读取的源文件举例如下,源文件基本上都是如下的格式
    public class TestForm  : Form
    {
      private strng strConn;
      private Button btnShow;
      ......  public TestForm()
      {
        strConn="";  //数据库连接字符串
        btnShow.click += new eventhandle(btnShowClick);
      }  private void btnShowClick(object this, eventargs e)
      {
        //操作
      }
    }
      

  5.   

    http://www.codeproject.com/csharp/runtime_eval.asp
      

  6.   

    谢谢sheep2002(sheep2002) 已经解决了