.net中创建简单反射实例

来源:互联网 发布:电脑连不上网多重网络 编辑:程序博客网 时间:2024/05/16 17:59

  1.   反射简单说明:反射就是动态发现类型信息的能力。它帮助程序设计人员在程序运行时利用一些信息去动态地使用类型,这些信息在设计时是未知的,这种能力类型于后期绑定。反射还支持的更高级的行为,能在运行时动态创建新类型,并且对这些新类型的操作进行调用。
  2. 类定义:
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. namespace ReflectionSample
  7. {
  8.     /**//**//**//// 
  9.     /// 说明:一个简单的类
  10.     /// 作者:文野
  11.     /// 联系:stwyhm.cnblog.com
  12.     /// 
  13.     public class ClassSample
  14.     {
  15.         // 默认构造
  16.         public ClassSample()
  17.         {
  18.             this.name = "您调用了默认构造创建了一个类实例。";
  19.         }
  20.         // 带参构造
  21.         public ClassSample(string name)
  22.         {
  23.             this.name = name;
  24.         }
  25.         // 字段 
  26.         public string name;
  27.         public string Field;
  28.         // 属性
  29.         private string property;
  30.         public string Property
  31.         {
  32.             set { this.property = value; }
  33.             get { return property; }
  34.         }
  35.         // public方法 
  36.         public string PublicClassMethod()
  37.         {
  38.             return string.Format("您反射了一个Public方法");
  39.         }
  40.         // private方法
  41.         private string PrivateClassMethod()
  42.         {
  43.             return string.Format("您反射了一个Private方法");
  44.         }
  45.         // static方法
  46.         public static string StaticMethod()
  47.         {
  48.             return "您反射了一个Static方法";
  49.         }
  50.         // 帶參方法
  51.         public string ParameterMethod(string para)
  52.         {
  53.             return para;
  54.         }
  55.         public event EventHandler eventHandler;
  56.         public void DoEvent()
  57.         {
  58.             eventHandler(null,EventArgs.Empty);
  59.         }
  60.     }
  61. }
  62. 反射示例
  63. using System;
  64. using System.Data;
  65. using System.Configuration;
  66. using System.Web;
  67. using System.Web.Security;
  68. using System.Web.UI;
  69. using System.Web.UI.WebControls;
  70. using System.Web.UI.WebControls.WebParts;
  71. using System.Web.UI.HtmlControls;
  72. using System.Reflection;
  73. using ReflectionSample;
  74. /**//**//**//// 
  75. /// 说明:一个简单的使用反射示例
  76. /// 作者:文野
  77. /// 联系:stwyhm.cnblog.com
  78. /// 
  79. public partial class _Default : System.Web.UI.Page
  80. {
  81.     protected void Page_Load(object sender, EventArgs e)
  82.     {
  83.         string path = Server.MapPath(Request.Path);
  84.         string filePath = path.Substring(0, path.LastIndexOf(''//'')) + @"/bin/ReflectionSample.dll";
  85.         // 获取程序集
  86.         Assembly classSampleAssembly = Assembly.LoadFrom(filePath);
  87.         // 从程序集中获取指定对象类型
  88.         Type classSampleType = classSampleAssembly.GetType("ReflectionSample.ClassSample");
  89.         使用Activator创建一个实例使用Activator创建一个实例#region 使用Activator创建一个实例
  90.         // 通过对象类型创建对象实例
  91.         ClassSample s1 = Activator.CreateInstance(classSampleType) as ClassSample;
  92.         Response.Write(s1.name + "(使用Activator创建一个实例)");
  93.         #endregion
  94.         动态调用构造函数动态调用构造函数#region 动态调用构造函数
  95.         // 调用无参构造
  96.         ConstructorInfo studentConstructor1 = classSampleType.GetConstructor(new Type[] { });
  97.         ClassSample s2 = studentConstructor1.Invoke(new object[] { }) as ClassSample;
  98.         Response.Write(s2.name + "");
  99.         // 调用有参构造
  100.         ConstructorInfo studentConstructor2 = classSampleType.GetConstructor(new Type[] { typeof(string) });
  101.         ClassSample s3 = studentConstructor2.Invoke(new object[] { "您调用了有参构造创建了一个类实例。" }) as ClassSample;
  102.         Response.Write(s3.name + "");
  103.         #endregion
  104.         反射方法反射方法#region 反射方法
  105.         // 调用非静态方法
  106.         string returnValue1 = classSampleType.InvokeMember("PublicClassMethod", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, s1, new object[] { }) as string;
  107.         Response.Write(returnValue1 + "");
  108.         // 调用静态方法
  109.         string returnValue2 = classSampleType.InvokeMember("StaticMethod", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, s1, new object[] { }) as string;
  110.         Response.Write(returnValue2 + "");
  111.         // 调用私有方法
  112.         string returnValue3 = classSampleType.InvokeMember("PrivateClassMethod", BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, null, s1, new object[] { }) as string;
  113.         Response.Write(returnValue3 + "");
  114.         #endregion
  115.         反射参数反射参数#region 反射参数
  116.         MethodInfo parameterMethod = classSampleType.GetMethod("ParameterMethod");
  117.         ParameterInfo[] paras = parameterMethod.GetParameters();
  118.         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() }));
  119.         #endregion
  120.         反射属性反射属性#region 反射属性
  121.         classSampleType.InvokeMember("Property", BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance, null, s1, new object[] { "您反射了一个属性" });
  122.         string returnValue4 = classSampleType.InvokeMember("Property", BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance, null, s1, new object[] { }) as string;
  123.         Response.Write(returnValue4 + "");
  124.         #endregion
  125.         反射字段反射字段#region 反射字段
  126.         classSampleType.InvokeMember("Field", BindingFlags.SetField | BindingFlags.Public | BindingFlags.Instance, null, s1, new object[] { "您反射了一个字段" });
  127.         string returnValue5 = classSampleType.InvokeMember("Field", BindingFlags.GetField | BindingFlags.Public | BindingFlags.Instance, null, s1, new object[] { }) as string;
  128.         Response.Write(returnValue5 + "");
  129.         #endregion
  130.     }
  131. }
0 0
原创粉丝点击