反射:
//獲取類(lèi)的描述對(duì)象
Type t = obj.GetType();
//取得字段描述對(duì)象
FieldInfo fi = t.GetField("name");
//獲取或設(shè)置字段值
fi.SetValue(obj, "k001");
fi.GetValue(obj);
一般在C#中以屬性替代字段
//獲取類(lèi)的描述對(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ù)類(lèi)型已知的情況
對(duì)象:obj
方法名:methodName
參數(shù)類(lèi)型 String int
反射:
//獲取類(lèi)的描述對(duì)象
Type t = obj.GetType();
//取得方法描述對(duì)象
MethodInfo mi = t.GetMethod("show");
//調(diào)用方法
mi.Invoke(obj, "實(shí)參1",實(shí)參2(int));
參數(shù)可以換成數(shù)組
通過(guò)程序集名稱(chēng)返回Assembly對(duì)象
Assembly ass = Assembly.Load("ClassLibrary831");
通過(guò)DLL文件名稱(chēng)返回Assembly對(duì)象
Assembly ass = Assembly.LoadFrom("ClassLibrary831.dll");
通過(guò)Assembly獲取程序集中類(lèi)
Type t = ass.GetType("ClassLibrary831.NewClass"); //參數(shù)必須是類(lèi)的全名
通過(guò)Assembly獲取程序集中所有的類(lèi)
Type[] t = ass.GetTypes();
//通過(guò)程序集的名稱(chēng)反射
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);
//通過(guò)DLL文件全名反射其中的所有類(lèi)型
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);
}
}