获取成员变量的方式有两种
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