.net C# 反射技术使用例子(转自:http://www.programbbs.com/doc/5740.htm)

获得实例的方法
1.获得同一程序集内的类型的实例。 

无参数构造函数
Type t = Type.GetType("AppCode.Employe");

if (t == null)
{
textBox1.Text = "Create Type Error";
return;
}

object emp = t.Assembly.CreateInstance("AppCode.Employe");

if (emp == null)
{
textBox1.Text = "Create Instance Error";
return;
}

StringBuilder sb = new StringBuilder();
sb.AppendLine("Type:" + t.FullName);
sb.AppendLine("Context:");
sb.AppendLine(emp.ToString());

textBox1.Text = sb.ToString();

有参数构造函数
Type t = Type.GetType("AppCode.Employe");

if (t == null)
{
textBox1.Text = "Create Type Error";
return;
}

//构造函数参数列表如下
//public Employe(string userid, string username, int age)

//生成参数类型数组
Type[] ts = new Type[3] { typeof(System.String),typeof(System.String), typeof(System.Int16) };

//获得构造函数
ConstructorInfo mi = t.GetConstructor(ts);

if (mi == null)
{
textBox1.Text = "Create ConstructorInfo Error";
return;
}

//生成参数值数组
object[] ps=new object[3];
ps[0] = "420106780911326";
ps[1] = "wesker";
ps[2] = 36;

object emp=mi.Invoke(ps);

StringBuilder sb = new StringBuilder();
sb.AppendLine("Type:" + t.FullName);
sb.AppendLine("Context:");
sb.AppendLine(emp.ToString());

textBox1.Text = sb.ToString();
2.获得不同程序集内的类型的实例。
比如当前窗体程序要通过反射获得一个名为"compenent1"(文件名为compenent1.dll)的程序集中的类型的实例。


无参数构造函数
Type t = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "//compenent1.dll").
GetType("compenent1.User");

if (t == null)
{
textBox1.Text = "Create Type Error";
return;
}

object user = t.Assembly.CreateInstance("compenent1.User");

if (user == null)
{
textBox1.Text = "Create Instance Error";
return;
}

StringBuilder sb = new StringBuilder();
sb.AppendLine("Type:" + t.FullName);
sb.AppendLine("Context:");
sb.AppendLine(user.ToString());

textBox1.Text = sb.ToString();

有参数的构造函数
Type t = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "//compenent1.dll").
GetType("compenent1.User");

if (t == null)
{
textBox1.Text = "Create Type Error";
return;
}

//构造函数参数列表如下
//public Employe(string userid, string username, int age)

Type[] ts = new Type[3] { typeof(System.String), typeof(System.String), typeof(System.Int16) };

ConstructorInfo mi = t.GetConstructor(ts);

if (mi == null)
{
textBox1.Text = "Create ConstructorInfo Error";
return;
}

object[] ps = new object[3];
ps[0] = "420106780911326";
ps[1] = "wesker";
ps[2] = 36;

object user = mi.Invoke(ps);

StringBuilder sb = new StringBuilder();
sb.AppendLine("Type:" + t.FullName);
sb.AppendLine("Context:");
sb.AppendLine(user.ToString());

textBox1.Text = sb.ToString();
3.使用反射调用方法


Type t = Type.GetType("AppCode.Employe");

if (t == null)
{
textBox1.Text = "Create Type Error";
return;
}

object emp = t.Assembly.CreateInstance("AppCode.Employe");

if (emp == null)
{
textBox1.Text = "Create Instance Error";
return;
}

MethodInfo mi = t.GetMethod("ToString");
string context = mi.Invoke(emp,null).ToString();

StringBuilder sb = new StringBuilder();

sb.AppendLine("Context:");
sb.AppendLine(context);
sb.AppendLine("Type:" + t.FullName);

textBox1.Text = sb.ToString();
4.获得类的信息
通过Type.GetMethods方法获得方法的信息。
通过Type.GetConstructors获得构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值