通过类名创建类的实例(反射)

通过类名创建类的实例(反射),第1张

如果那些需要被反射的Form与FormMain在同一程序集中,可以用Activator类反射Form对象:

Form f = (Form)Activator.CreateInstance(Type.GetType(name))

然后

f.Visible = true

f.Show()// 非模态,或按模态方式显示 f.ShowDialog()

注意,name参数必须是要反射的Form对象的带命名空间的名称。

完整代码:

private void ShowWindowByName(string name)

{

Form f = (Form)Activator.CreateInstance(Type.GetType(name))

f.Visible = true

f.Show()

}

调用:

ShowWindowByName(this.GetType().Namespace+"."+"Form1")

ShowWindowByName(this.GetType().Namespace+"."+"Form2")

......

针对你的补充:

是呀,还是按照以往的方式,在Form1,Form2...上添加控件和事件处理方法。反射的意思是,根据现有的已经制作好的窗体的名字,在运行时动态地创建它的实例,然后Show出来。你可以试试看,先做一个Form1窗体,放上按钮什么的,然后再做FormMain窗体,添加一个按钮,然后在添加Click事件的处理方法,在这方法之中,加入上面的代码。

如果另一个类中的那个方法是私有的话,就不能直接调用到,如果是其他类型的话看情况,如果是静态的(static)话,直接用类名可以调用到,如果是非静态的,就需要利用另一个类的实例(也就是用那个类生成的对象)来调用。

class A{

public static void a(){}

public void b(){}

}

public class B{

public static void main(String[] args){

A.a()//静态

new A().b()//非静态

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11814054.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存