• C#反射技术的简单操作(读取和设置类的属性)


    public class A
    {
      public int Property1 { get; set; }
    }
    static void Main(){
      A aa = new A();
      Type type = aa.GetType();//获取类型
      System.Reflection.PropertyInfo propertyInfo = type.GetProperty("Property1");
      propertyInfo.SetValue(aa, 5, null);//给对应属性赋值
      int value = (int)propertyInfo.GetValue(aa, null);
      Console.WriteLine(value );
    }

    少量属性的自动化操作手动添加几下当然是没有问题的,但是属性数量较多的时候敲起这些繁锁的代码可以困了,再说对扩展和维护性造成很多的不便,这时,就需要使用反射来实现了。

    要想对一个类型实例的属性或字段进行动态赋值或取值,首先得得到这个实例或类型的Type,微软已经为我们提供了足够多的方法。

    首先建立一个测试的类

    public class MyClass 
    { 
      public int one { set; get; } 
      public int two { set; get; } 
      public int five { set; get; } 
      public int three { set; get; } 
      public int four { set; get; } 
    } 

    然后编写反射该类的代码

    MyClass obj = new MyClass(); 
    Type t = typeof(MyClass); 
    //循环赋值 
    int i = 0; 
    foreach (var item in t.GetProperties()) 
    { 
      item.SetValue(obj, i, null); 
      i += 1; 
    } 
    //单独赋值 
    t.GetProperty("five").SetValue(obj, 11111111, null); 
    //循环获取 
    StringBuilder sb = new StringBuilder(); 
    foreach (var item in t.GetProperties()) 
    { 
      sb.Append("类型:" + item.PropertyType.FullName + " 属性名:" + item.Name + " 值:" + item.GetValue(obj, null) + "<br />"); 
    } 
    //单独取值 
    int five = Convert.ToInt32(t.GetProperty("five").GetValue(obj, null)); 
    sb.Append("单独取five的值:" + five); 
    string result = sb.ToString(); 
    Response.Write(result); 

    测试显示结果: 
    类型:System.Int32 属性名:one 值:0 
    类型:System.Int32 属性名:two 值:1 
    类型:System.Int32 属性名:five 值:11111111 
    类型:System.Int32 属性名:three 值:3 
    类型:System.Int32 属性名:four 值:4 
    单独取five的值:11111111

    了解了类的属性反射使用后,那么方法也是可以这样做的,即t.GetProperties()改为t.GetMethods(),操作方法同上。
     

    注:以上代码中如不能直接使用请添加using System.Text;的引用。

    转载:

    天使半只翼  C#反射技术的简单操作(读取和设置类的属性)

  • 相关阅读:
    PAT (Advanced Level) 1010. Radix (25)
    PAT (Advanced Level) 1009. Product of Polynomials (25)
    PAT (Advanced Level) 1008. Elevator (20)
    PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
    PAT (Advanced Level) 1006. Sign In and Sign Out (25)
    PAT (Advanced Level) 1005. Spell It Right (20)
    PAT (Advanced Level) 1004. Counting Leaves (30)
    PAT (Advanced Level) 1001. A+B Format (20)
    PAT (Advanced Level) 1002. A+B for Polynomials (25)
    PAT (Advanced Level) 1003. Emergency (25)
  • 原文地址:https://www.cnblogs.com/wangfuyou/p/5165903.html
Copyright © 2020-2023  润新知