1. 获取方法以及动态调用方法
GetType()
获取当前实例的 System.Type
返回结果:
当前实例的准确运行时类型
GetFields()
返回当前 System.Type 的所有公共字段
返回结果:
表示为当前 System.Reflection.FieldInfo 定义的所有公共字段的 System.Type 对象数组。
如果没有定义的公共字段,则为 System.Type 类型的空数组。
GetProperty(string name)
搜索具有指定名称的公共属性
参数:
name:包含要获取的公共属性名的字符串
返回结果:
表示具有指定名称的公共属性的对象(如果找到的话);否则为 null
GetValue(object obj, object[] index)
用索引化属性的可选索引值返回指定对象的该属性值
obj:将返回其属性值的对象
index:索引化属性的可选索引值。 索引化属性的索引从零开始。 对于非索引化属性,该值应为 null
返回结果:
指定对象的属性值
SetValue(object obj, object value, object[] index)
用索引化属性的可选索引值设置指定对象的该属性值
参数:
obj:将设置其属性值的对象
value:新的属性值
index:索引化属性的可选索引值。 对于非索引化属性,该值应为 null
GetGetMethod();
返回此属性的公共 get 访问器。
返回结果:
MethodInfo 对象,表示此属性的公共 get 访问器;如果 null 访问器是非公共的或不存在,则为 get。
需要实例化的类
namespace ConsoleTest
{
public class TestClass
{
private string _value;
public TestClass()
{
}
public TestClass(string value)
{
_value = value;
}
public string GetValue(string name)
{
if (_value == null)
return "NULL";
else
return name + " : " + _value;
}
public string Value
{
set
{
_value = value;
}
get
{
if (_value == null)
return "NULL";
else
return _value;
}
}
}
}
TestClass 包含一个有参数的构造函数,一个GetValue的方法,一个Value属性,我们可以通过方法的名称来得到方法并且调用,代码如下:
class program
{
static void Main(string[] args)
{
//获取类型信息
Type t = Type.GetType("ConsoleTest.TestClass");
//构造器的参数
object[] constuctParms = new object[] { "timmy" };
//根据类型创建对象
object dObj = Activator.CreateInstance(t, constuctParms);
//获取方法的信息
MethodInfo method = t.GetMethod("GetValue");
//调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值
BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;
//GetValue方法的参数
object[] parameters = new object[] { "Hello" };
//调用方法,用一个object接收返回值
object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder, parameters, null);
Console.ReadKey();
}
}
2. 动态获取类的属性值
MyClass myClass = new MyClass();
string feildName = "name";
myClass.GetType().GetProperty(feildName).GetValue(myClass, null).ToString();
//动态赋值同理
myClass.GetType().GetProperty(feildName).SetValue(myClass, value, null);