-
- 反射简单说明:反射就是动态发现类型信息的能力。它帮助程序设计人员在程序运行时利用一些信息去动态地使用类型,这些信息在设计时是未知的,这种能力类型于后期绑定。反射还支持的更高级的行为,能在运行时动态创建新类型,并且对这些新类型的操作进行调用。
- 类定义:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace ReflectionSample
- {
- /**//**//**////
- /// 说明:一个简单的类
- /// 作者:文野
- /// 联系:stwyhm.cnblog.com
- ///
- public class ClassSample
- {
- // 默认构造
- public ClassSample()
- {
- this.name = "您调用了默认构造创建了一个类实例。";
- }
- // 带参构造
- public ClassSample(string name)
- {
- this.name = name;
- }
- // 字段
- public string name;
- public string Field;
- // 属性
- private string property;
- public string Property
- {
- set { this.property = value; }
- get { return property; }
- }
- // public方法
- public string PublicClassMethod()
- {
- return string.Format("您反射了一个Public方法");
- }
- // private方法
- private string PrivateClassMethod()
- {
- return string.Format("您反射了一个Private方法");
- }
- // static方法
- public static string StaticMethod()
- {
- return "您反射了一个Static方法";
- }
- // 帶參方法
- public string ParameterMethod(string para)
- {
- return para;
- }
- public event EventHandler eventHandler;
- public void DoEvent()
- {
- eventHandler(null,EventArgs.Empty);
- }
- }
- }
- 反射示例
- using System;
- using System.Data;
- using System.Configuration;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Web.UI.HtmlControls;
- using System.Reflection;
- using ReflectionSample;
- /**//**//**////
- /// 说明:一个简单的使用反射示例
- /// 作者:文野
- /// 联系:stwyhm.cnblog.com
- ///
- public partial class _Default : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- string path = Server.MapPath(Request.Path);
- string filePath = path.Substring(0, path.LastIndexOf(''//'')) + @"/bin/ReflectionSample.dll";
- // 获取程序集
- Assembly classSampleAssembly = Assembly.LoadFrom(filePath);
- // 从程序集中获取指定对象类型
- Type classSampleType = classSampleAssembly.GetType("ReflectionSample.ClassSample");
- 使用Activator创建一个实例使用Activator创建一个实例#region 使用Activator创建一个实例
- // 通过对象类型创建对象实例
- ClassSample s1 = Activator.CreateInstance(classSampleType) as ClassSample;
- Response.Write(s1.name + "(使用Activator创建一个实例)");
- #endregion
- 动态调用构造函数动态调用构造函数#region 动态调用构造函数
- // 调用无参构造
- ConstructorInfo studentConstructor1 = classSampleType.GetConstructor(new Type[] { });
- ClassSample s2 = studentConstructor1.Invoke(new object[] { }) as ClassSample;
- Response.Write(s2.name + "");
- // 调用有参构造
- ConstructorInfo studentConstructor2 = classSampleType.GetConstructor(new Type[] { typeof(string) });
- ClassSample s3 = studentConstructor2.Invoke(new object[] { "您调用了有参构造创建了一个类实例。" }) as ClassSample;
- Response.Write(s3.name + "");
- #endregion
- 反射方法反射方法#region 反射方法
- // 调用非静态方法
- string returnValue1 = classSampleType.InvokeMember("PublicClassMethod", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, s1, new object[] { }) as string;
- Response.Write(returnValue1 + "");
- // 调用静态方法
- string returnValue2 = classSampleType.InvokeMember("StaticMethod", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, s1, new object[] { }) as string;
- Response.Write(returnValue2 + "");
- // 调用私有方法
- string returnValue3 = classSampleType.InvokeMember("PrivateClassMethod", BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, null, s1, new object[] { }) as string;
- Response.Write(returnValue3 + "");
- #endregion
- 反射参数反射参数#region 反射参数
- MethodInfo parameterMethod = classSampleType.GetMethod("ParameterMethod");
- ParameterInfo[] paras = parameterMethod.GetParameters();
- for (int i = 0; i ", new object[] { paras[i].Name, paras[i].ParameterType.ToString(), paras[i].IsOptional.ToString(), paras[i].Position.ToString(), paras[i].DefaultValue.ToString() }));
- #endregion
- 反射属性反射属性#region 反射属性
- classSampleType.InvokeMember("Property", BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance, null, s1, new object[] { "您反射了一个属性" });
- string returnValue4 = classSampleType.InvokeMember("Property", BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance, null, s1, new object[] { }) as string;
- Response.Write(returnValue4 + "");
- #endregion
- 反射字段反射字段#region 反射字段
- classSampleType.InvokeMember("Field", BindingFlags.SetField | BindingFlags.Public | BindingFlags.Instance, null, s1, new object[] { "您反射了一个字段" });
- string returnValue5 = classSampleType.InvokeMember("Field", BindingFlags.GetField | BindingFlags.Public | BindingFlags.Instance, null, s1, new object[] { }) as string;
- Response.Write(returnValue5 + "");
- #endregion
- }
- }
.net中创建简单反射实例
最新推荐文章于 2024-01-11 17:26:33 发布