C#反射(Reflection)对类的属性get或set值实现思路

时间:2021-08-19 22:38:54

近段时间,有朋友叫Insus了解一下反射(Reflection)方面的知识,反射提供了封装程序集、模块和类型的对象(Type类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。 
下面的例子,是Insus练习对一个类别的属性进行set和get值。 

首先写一个类,再写一个可读写的属性: 

复制代码代码如下:


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
/// <summary> 
/// Summary description for Member 
/// </summary> 
namespace Insus.NET 

public class Member 

private string _Name; 
public string Name 

get 

return _Name; 

set 

_Name = value; 


public Member() 

// 
// TODO: Add constructor logic here 
// 



Insus.NET一向是写asp.net程序,练习也是在站点进行。 
创建一个网页,引用两个namespace: 

复制代码代码如下:


using Insus.NET; 
using System.Reflection; 


读写属性: 

复制代码代码如下:


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Insus.NET; 
using System.Reflection; 
public partial class _Default : System.Web.UI.Page 

protected void Page_Load(object sender, EventArgs e) 

//实例化类 
Member objMember = new Member(); 
//对属性set值 
PropertyInfo pi = objMember.GetType().GetProperty("Name", BindingFlags.Public | BindingFlags.Instance); 
if (null != pi && pi.CanWrite) 

pi.SetValue(objMember, "Insus.NET", null); 

//对属性get值 
PropertyInfo pii = objMember.GetType().GetProperty("Name", BindingFlags.Public | BindingFlags.Instance); 
if (null != pii && pi.CanRead) 

object obj_Name = pii.GetValue(objMember, null); 
Response.Write(obj_Name.ToString());