时间:2021-07-01 10:21:17 帮助过:38人阅读
要想对一个类型实例的属性或字段进行动态赋值或取值,首先得得到这个实例或类型的Type,微软已经为我们提供了足够多的方法。
首先建立一个测试的类
代码如下:
- <br>public class MyClass <br>{ <br>public int one { set; get; } <br>public int two { set; get; } <br>public int five { set; get; } <br>public int three { set; get; } <br>public int four { set; get; } <br>} <br> <br><strong>然后编写反射该类的代码 <br></strong><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>MyClass obj = new MyClass(); <br>Type t = typeof(MyClass); <br>//循环赋值 <br>int i = 0; <br>foreach (var item in t.GetProperties()) <br>{ <br>item.SetValue(obj, i, null); <br>i += 1; <br>} <br>//单独赋值 <br>t.GetProperty("five").SetValue(obj, 11111111, null); <br>//循环获取 <br>StringBuilder sb = new StringBuilder(); <br>foreach (var item in t.GetProperties()) <br>{ <br>sb.Append("类型:" + item.PropertyType.FullName + " 属性名:" + item.Name + " 值:" + item.GetValue(obj, null) + "<br />"); <br>} <br>//单独取值 <br>int five = Convert.ToInt32(t.GetProperty("five").GetValue(obj, null)); <br>sb.Append("单独取five的值:" + five); <br>string result = sb.ToString(); <br>Response.Write(result); <br> <br>测试显示结果: <br>类型:System.Int32 属性名:one 值:0 <br>类型:System.Int32 属性名:two 值:1 <br>类型:System.Int32 属性名:five 值:11111111 <br>类型:System.Int32 属性名:three 值:3 <br>类型:System.Int32 属性名:four 值:4 <br>单独取five的值:11111111 <br><br>好了,了解了类的属性反射使用后,聪明的你可能就想到了方法也是可以这样做的,即t.GetProperties()改为t.GetMethods(),操作方法同上。<p></p></li><li> </li><li> </li></ol></pre>