反射是編程的讀取與類型相關聯的元數據的行爲,命名空間爲System.Reflection。
Assembly:表示一個程序集,提供了一個LoadFrom方法。用法:
Assembly SampleAssembly=Assembly.LoadFrom("c:\\abc.dll");
還可以使用txt文本,但要把abc.dll文件的信息寫入txt文本
例如abc.dll文件的路徑,命名空間和類方法等
下面舉一個反射的例子
static void Main(string[] args)
{ string[] DllArr = File.ReadAllLines(@"E:\1.txt", Encoding.Default);// 把讀出的文件內容放入到數組中
Assembly Ass = Assembly.LoadFile(DllArr[0]);//加載指定路徑上的程序集文件內容
object myobj = Ass.CreateInstance(DllArr[1]);//搜索指定類型創建實例
Type mytype = Ass.GetType(DllArr[1]);//獲取類型
MethodInfo mymethod = mytype.GetMethod(DllArr[2]);//獲取方法信息
object[] objarr = new object[DllArr.Length - 3];//創建新數組比DllArr數組的長度小三
for (int i = 0; i < objarr.Length; i++)
{
objarr[i] = DllArr[i + 3];
}
mymethod.Invoke(myobj, objarr);//使用指定參數調用當前實例的方法或構造函數
}
反射調用構造函數例子,
static void Main(string[] args)
{
BindingFlags bf =
BindingFlags.DeclaredOnly |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance;
Type t = typeof(Demo_Class);//獲取類的類型
ConstructorInfo Cons = t.GetConstructor
(new Type[0]); //構造函數無參,所以構造函
數無類型參數。如有參數則寫 (new Type[]
{typeof(int)});
object Obj = Cons.Invoke(null);//傳入的構
造參數爲空,得到對象,如有參數則寫new
object[] { 456 }
object[] MethodPar = new object[] { “a” };
//方法的參數
MethodInfo mi = t.GetMethod
(“Method”, bf);
//得到方法
Console.WriteLine(mi.Invoke(Obj, MethodPar));
}