c# 反射使用及详解

来源:互联网 发布:arm服务器 知乎 编辑:程序博客网 时间:2024/06/06 01:28

获取成员变量的方式有两种

typeof(T).GetPropertys(BindingFlags 参数) // 这中方式获取的成员变量一定要是实现了 get set 存储器的变量typeof(T).GetFields(BindingFlags 参数) // 这种方式获取的成员变量不能实现 get set 。 否则获取不到成员变量。 

命名空间备注 :

BindingFlags 在 System.Reflection命名空间下

使用

typeof(T).GetPropertys (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); // 获取T 类的所有成员变量,包括公有与非公有

先写一个测试的类,有实现了get set 存储器的成员变量与没有实现get set 的成员变量

public class Class1{    string _className = string.Empty;    string classNameGetSet{        get{             return _className;        }        set{             _className = value;        }    }    protected float _speed;    private bool canMove{        get{             return true;        }        set{ }    }}public class test : MonoBehavior{    void Start(){    Class1 c1 = new Class1 ();    // 通过GetPropertys 获取到的成员变量    var tProperty = typeof(Class1).GetProperties (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);    for(int i = 0;i < tProperty.Length;i++){                Debug.Log ("name :[" + tProperty [i].Name + "]    value :[" + tProperty [i].GetValue (c1, null) + "]   type :[" + tProperty [i].PropertyType + "]");            }    // 通过GetFields 获取到的成员变量    var field = typeof(Class1).GetFields (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);            for(int i = 0;i < field.Length;i++){                Debug.Log ("name :[" + field [i].Name + "]  value :[" + field [i].GetValue (c1) + "]  type :[" + field [i].FieldType + "]");            }}}

通过GetPropertys 获取到的成员变量。 可以看到,只获取到实现了 get set 存储器的成员变量。

这里写图片描述

通过GetFields 获取到的成员变量。 可以看到,只获取到没有实现 get set 的成员变量
这里写图片描述

通过反射还能获取到类的所有方法,调用类里的方法等。

其他使用方法参考以下链接
http://www.cnblogs.com/yaozhenfa/p/CSharp_Reflection_1.html 玩转反射

BindingFlags 枚举介绍
http://blog.csdn.net/qq_32452623/article/details/53401890

0 0
原创粉丝点击