环境:VS2005 C# winForm是的,google里很多反射方面资料,不过基本上都是互抄的。最主要一点:它只是作者在复述自己所掌握的东西而不是把知识教给新手。class A
{
public A(){}
string name = "";
public string Name
{
get{return name;}
}
public void SetName(string value)
{name = value;}
}请问如何动态创建类A的对象?之后如何调用动态对象的Name属性和SetName方法?
{
public A(){}
string name = "";
public string Name
{
get{return name;}
}
public void SetName(string value)
{name = value;}
}请问如何动态创建类A的对象?之后如何调用动态对象的Name属性和SetName方法?
首先你的命名就不好了,建议去看看命名规则。
再次,你莫非属性。变量搞不清的?
string name = "";
public string Name
{
get{return name;}
}
public void SetName(string value)
{name = value;}
这是在干什么?
属性有get set方法的好不
string name = "";
public string Name
{
get{return name;}
set{name = value;}
}不就是A instanceOfA=new A();
string name=A.Name;
么。
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Reflection;
using System.Text;
using System.Windows.Forms;namespace 反射
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += new EventHandler(Form1_Load);
} object cl;
Type t; void Form1_Load(object sender, EventArgs e)
{
cl = Activator.CreateInstance(Type.GetType("反射.Class1"));
t = cl.GetType();
foreach(PropertyInfo pi in t.GetProperties())
{
this.listBox1.Items.Add(pi.Name);
} foreach (MemberInfo mi in t.GetMethods())
{
this.listBox1.Items.Add(mi.Name);
}
} private void button1_Click(object sender, EventArgs e)
{
object[] par = new object[] { 3 };
t.InvokeMember("setvalue", BindingFlags.Default | BindingFlags.InvokeMethod, null, cl, par); int v = (int)t.InvokeMember("myvalue", BindingFlags.Default | BindingFlags.GetProperty, null, cl, new object[] { }); this.textBox1.Text = v.ToString();
}
}
}