反射:
//獲取類的描述對(duì)象
Type t = obj.GetType();
//取得字段描述對(duì)象
FieldInfo fi = t.GetField("name");
//獲取或設(shè)置字段值
fi.SetValue(obj, "k001");
fi.GetValue(obj);
一般在C#中以屬性替代字段
//獲取類的描述對(duì)象
Type t = obj.GetType();
//取得屬性描述對(duì)象
PropertyInfo pi1 = t.GetProperty("Name");
//獲取或設(shè)置屬性值
pi1.SetValue(obj, "k001",null);
pi1.GetValue(obj,null);
反射調(diào)用方法
一般用于對(duì)象、方法名、參數(shù)類型已知的情況
對(duì)象:obj
方法名:methodName
參數(shù)類型 String int
反射:
//獲取類的描述對(duì)象
Type t = obj.GetType();
//取得方法描述對(duì)象
MethodInfo mi = t.GetMethod("show");
//調(diào)用方法
mi.Invoke(obj, "實(shí)參1",實(shí)參2(int));
參數(shù)可以換成數(shù)組
通過程序集名稱返回Assembly對(duì)象
Assembly ass = Assembly.Load("ClassLibrary831");
通過DLL文件名稱返回Assembly對(duì)象
Assembly ass = Assembly.LoadFrom("ClassLibrary831.dll");
通過Assembly獲取程序集中類
Type t = ass.GetType("ClassLibrary831.NewClass"); //參數(shù)必須是類的全名
通過Assembly獲取程序集中所有的類
Type[] t = ass.GetTypes();
//通過程序集的名稱反射
Assembly ass = Assembly.Load("ClassLibrary831");
Type t = ass.GetType("ClassLibrary831.NewClass");
object o = Activator.CreateInstance(t, "", "");
MethodInfo mi = t.GetMethod("show");
mi.Invoke(o, null);
//通過DLL文件全名反射其中的所有類型
Assembly assembly = Assembly.LoadFrom("xxx.dll的路徑");
Type[] aa = a.GetTypes();
foreach(Type t in aa)
{
if(t.FullName == "a.b.c")
{
object o = Activator.CreateInstance(t);
}
}