反射小例子

反射是編程的讀取與類型相關聯的元數據的行爲,命名空間爲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));

        }

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章