程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c# 反射技術雜談

c# 反射技術雜談

編輯:C#入門知識

概念 反射 能夠查看元數據的類型,等信息的一種能力。 元數據 編譯以後最基本的數據單元。本質上就上一大追表。當程序編譯之後就能形成很多表,比如類定義表,字段定義表,方法定義表。 反射技術 就是使用REFLACSIOIN命名空間下的工具允許你解析這些元數據代表的代碼. PE文件 被稱為可移植的執行體是PortableExecute的全稱,常見的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微軟Windows操作系統上的程序文件(可能是間接被執行,如DLL).在.net程序中pe文件包含兩部分,一部分是元數據信息,另外一部分是msIL信息(msil以及標記元數據信息的部分。) 使用的命名空間 System.refloction System.Type 作用 反射的主要作用是用來擴展系統和動態調用程序集 : 擴展系統:       所謂擴展系統就是先把系統寫好,系統裡面定義接口,後面開發的人去寫接口的代碼。此時該系統就要用反射了,系統用反射調用接口,當接口沒寫,系統利用反射就不會出錯,此時就等於沒實現此功能而已,當接口被人寫好了,系統就會自動調用接口的功能展現在系統上。反射實現即插即用功能。 動態調用程序集 動態調用程序集就是利用反射去調用編譯好的dll,當然此時的dll沒有被引用到你所建的工程裡面。當你編譯你的工程時,不會編譯你調用的dll,當你運行到調用dll時,此時才會去調用dll,判斷是否有語法語義,等編譯,運行的錯誤。這樣利用反射具有一定靈活性,就是不用從你的工程調用dll,還有就是dll可隨時改變(當然接口還是要對應),不需改變你所建的工程。 示例代碼 [csharp]      class Program       {           static void Main(string[] args)           {               Console.WriteLine("測試程反射技術。。。");                             Assembly ass;               Type type;               object obj;                             //1 加載程序集               ass =Assembly.LoadFile(@"D:\MYProject\Thread_sTU\DLL_reflection\bin\Debug\DLL_reflection.dll");               //2 根據程序集信息獲取程序集的類型信息. 注意這個方法就是獲取元數據中的定義的各種類型(類,方法,屬性等)信息。               type = ass.GetType("DLL_reflection.Class1");               //3 根據類型信息獲取方法對象               MethodInfo method = type.GetMethod("text");                   //4 處理方法對象的參數對象。               object[] paramobj = new object[0] ;               //5 創建程序集實例               obj = ass.CreateInstance("DLL_reflection.Class1");                   //6 根據方法對象,以及實例對象,方法出參數對象 調用此函數。               method.Invoke(obj, paramobj);                   Console.WriteLine("測試程反射技術 END ");               Console.ReadLine();           }       }   }        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved