C# 反射
来源:互联网 发布:淘宝怎么报名淘抢购 编辑:程序博客网 时间:2024/05/01 05:50
反射,Reflection,通过它我们可以在运行时获得各种信息,如程序集、模块、类型、字段、属性、方法和事件
通过对类型动态实例化后,还可以对其执行操作
简单来说就是用string可以在runtime为所欲为的东西,实际上就是一个.net framework内建的万能工厂
一般用于插件式框架程序和设计模式的实现,当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情
Demo
新建一类库,代码如下:
#region 反射应用
private void button14_Click(object sender, EventArgs e)
{
string path = @"G:/Linq/Linq/RefTest2/bin/Debug/RefTest2.dll";
Assembly tmpAss = Assembly.LoadFrom(path);
//遍历程序集内所有的类型,并实例化
Type[] tmpTypes = tmpAss.GetTypes();
foreach (Type tmpType in tmpTypes)
{
//获取第一个类型的构造函数信息
ConstructorInfo[] tmpConsInfos = tmpType.GetConstructors();
foreach (ConstructorInfo tmpConsInfo in tmpConsInfos)
{
//为构造函数生成调用的参数集合
ParameterInfo[] tmpParamInfos = tmpConsInfo.GetParameters();
object[] tmpParams = new object[tmpParamInfos.Length];
for (int i = 0; i < tmpParamInfos.Length; i++)
{
tmpParams[i] = tmpAss.CreateInstance(tmpParamInfos[i].ParameterType.FullName);
if (tmpParamInfos[i].ParameterType.FullName == "System.String")
{
tmpParams[i] = "Clark";
}
}
//实例化对象
object tmpObj = tmpConsInfo.Invoke(tmpParams);
//Console.WriteLine(tmpObj);
MessageBox.Show(tmpObj.ToString());
//获取所有方法并执行
foreach (MethodInfo tmpMethod in tmpType.GetMethods())
{
//为方法的调用创建参数集合
tmpParamInfos = tmpMethod.GetParameters();
tmpParams = new object[tmpParamInfos.Length];
for (int i = 0; i < tmpParamInfos.Length; i++)
{
tmpParams[i] = tmpAss.CreateInstance(tmpParamInfos[i].ParameterType.FullName);
if (tmpParamInfos[i].ParameterType.FullName == "System.String")
{
tmpParams[i] = "Clark Zheng";
}
if (tmpParamInfos[i].ParameterType.FullName == "System.Int32")
{
tmpParams[i] = 27;
}
}
tmpMethod.Invoke(tmpObj, tmpParams);
}
//调用完方法后再次打印对象,比较结果
//Console.WriteLine(tmpObj);
MessageBox.Show(tmpObj.ToString());
}
}
#endregion
- C# 反射
- C#反射
- C# 反射
- C#反射
- C#反射
- C# 反射
- C#反射
- c#反射
- c#反射
- C#反射
- c# 反射
- C# 反射
- c# 反射
- C#反射
- C#反射
- C#反射
- C# 反射
- C#反射
- Mysql日期相减
- Android NDK使用常见错误
- 服务器采购秘籍
- 好的嵌入式学习blog
- 很好的 Hadoop、HBase 等开源项目资料网址(持续更新)
- C# 反射
- android dialog用法汇总
- SVG 文件调用javascript代码
- B2B,B2C,C2C,C2B,B2G
- vmware workstation迁移至vmware esx
- C/C++ extern详解
- php5.3.3调用https的wsdl,出现错误,请大家帮忙看看
- 今天(2011/07/01)开始 开始写博客!
- 移植u-boot-2010.09到三星SC32442平台(二):nand读写和ax88180以太网支持