2 回答
TA贡献1797条经验 获得超6个赞
用反射:
主调类:
private void button3_Click(object sender, EventArgs e)
{
bindForm("WindowsApplication1.UserControl1");
}
private void bindForm(string f)
{
System.Type t = System.Type.GetType(f);
object ff = Activator.CreateInstance(t,null);
System.Reflection.MethodInfo method = t.GetMethod("setText");
System.Reflection. BindingFlags flag = System.Reflection. BindingFlags.Public |System.Reflection. BindingFlags.Instance;
object returnValue = method.Invoke(ff, null);
}
各窗体:
public partial class UserControl1 : Form
{
public UserControl1()
{
InitializeComponent();
}
public void setText()
{
Text = "kkk";
Show();
}
}
TA贡献1946条经验 获得超3个赞
public void rename(类型? ci,string stri) //???这个地方怎么定义参数ci???
用object ci
对象.万类之根~~
剩下的不说啦哈哈~
最好你用
public void rename(ref string name,string stri)用引用参数
{
name = stri;
}
rename(class1.name,"123");
//然后这里class1.name 就被设成"123"了
反射机制-----本人以前也只稍微研究过一会,也不太熟悉,以下提供为参考
System.Reflection.Assembly
Assembly assembly = Assembly.LoadFile("dll绝对路径");
Module[] modules = assembly.GetModules();
//得到方法
---------------------------------------------
//获取类型信息
Type t = Type.GetType("TestSpace.TestClass");
//构造器的参数
object[] constuctParms = new object[]{"timmy"};
//根据类型创建对象
object dObj = Activator.CreateInstance(t,constuctParms);
//获取方法的信息
MethodInfo method = t.GetMethod("GetValue");
//调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值
BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;
//GetValue方法的参数
object[] parameters = new object[]{"Hello"};
//调用方法,用一个object接收返回值
object returnValue = method.Invoke(dObj,flag,Type.DefaultBinder,parameters,null);
个人见解,反射用起来巨耗性能,可以称为是华丽的招数
- 2 回答
- 0 关注
- 554 浏览
添加回答
举报