直接展示简单的示例代码。
using UnityEngine;
using System.Collections;
using System;
using System.Reflection;
public class GetProperties : MonoBehaviour {
// Use this for initialization
void Start () {
student t=new student();
Getmember(t);
System.Object o = new System.Object();
}
// Update is called once per frame
void Update () {
}
void Getmember(student t)
{
Type type =t.GetType();
//foreach(PropertyInfo p in type.GetProperties())
//{
// print(p.Name + "=" + p.GetValue(t, null));
//}
//foreach(MemberInfo m in type.GetMembers())
//{
// print(m.Name);
//}
FieldInfo[] finfos = type.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
foreach(FieldInfo finfo in finfos)
{
print("字段名称" + finfo.Name + " 字段类型:" + finfo.FieldType.ToString());
}
}
}
class student
{
private string name;
private int age;
public int id;
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
public student(string n, int a, int i)
{
name = n;
Age = a;
id = i;
}
}
示例看起来蛮简单的嘛。
反射能够获取一个未知类里面的所有的方法,属性,字段,构造函数等等。在做一些插件的时候这个是很好用的功能。unity 内置的周期函数例如:Awake, start ,Update 等的方法也是反射实现的。在使用的时候要注意的是反射也挺耗内存的。所以在unity里面,如果有空的Update,Start之类的方法,一定要清理掉,避免不必要的性能消耗。