正在阅读:.net中实现运行时从字符串动态创建对象.net中实现运行时从字符串动态创建对象

2004-02-14 09:34 出处:CSDN 作者:Ninputer 责任编辑:linjixiong
然后加给窗体入一个新按钮,输入以下事件代码:      '方法一      Dim t As Type = GetType(MyClassTest)      o = System.Activator.CreateInstance(t)      o.Hello()      第一行GetType(MyClassTest)函数就已经获得了我们创建的类的类型对象(C#中使用typeof函数)。接下来,我们用了System.Activator类的一个静态方法CreateInstance创建出对象实例,并将对象引用赋给o。Activator是一个用来在创建本地或远程对象的工具。运行这个程序,我们可以从Commond Window(命令窗口,一般在调试状态IDE的右下方)看到WriteLine函数运行的结果,可以看到正确建立的对象。      如果我们用的类具有比较复杂的构造函数,还可以使用构造函数创建所需的对象,代码如下:      '方法二      Dim t As Type = GetType(MyClassTest)      Dim c As System.Reflection.ConstructorInfo   Dim types() As Type      ReDim types(-1)      c = t.GetConstructor(Reflection.BindingFlags.Instance _       Or Reflection.BindingFlags.Public, _       Nothing, Reflection.CallingConventions.HasThis, types, Nothing)      Dim params() As Object      ReDim params(-1)      o.Hello()      这里我们创建一个System.Reflection.ConstructorInfo的对象,通过它可以获得类构造方法的信息。我们用的是Type类的GetConstructor方法来搜索可用的构造方法。      需要解释一下的是types()数组,这个数组是搜索构造方法所用的参数类型表。我们的类的构造方法没有参数,所以需要一个空但不为Nothing(C#中为null)的数组,ReDim types(-1)就是建立这种数组的语句,在C#中可写作:      types = new Type[0];      若构造方法是这样:      Public Sub New(ByVal A As Integer, B As String)      那么相应的types数组就应该是      Dim types(1) As Type      types(0) = GetType(Int32)      types(1) = GetType(String)      Reflection.BindingFlags.Instance和Reflection.BindingFlags.Public是一个位屏蔽,是指定搜索方式的选项。
察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品