C# System.Reflection (反射)

來源:互聯網
上載者:User

標籤:each   filename   str   create   它的   dao   方法參數   http   重要   

在使用.NET建立的程式或組件時,中繼資料(metadata)和代碼(code)都儲存於“自成一體”的單元中,這個單元稱為裝配件。我們可以在程式運行期間訪問這些資訊。
 
在System.Reflection中有這樣一個class————Assembly,我們可以通過它來載入一個裝配件。方法如下: 
Assembly assm=Assembly.LoadFrom(fileName); 
其中filename是要載入的裝配件的檔案名稱(帶路徑)。 
接下來,我們就可以通過使用System.Reflection內提供的Info classes來擷取裝配件中的資訊了。首先讓我們看一下這些Info classes:
MethodInfo 擷取某個“成員函數”的資訊,並提供對此“成員函數”中繼資料的訪問。 
ParameterInfo 擷取某個“參數”的資訊,並提供對此“參數”中繼資料的訪問。 
Constructorinfo 擷取某個“建構函式”的資訊,並提供對此“建構函式”中繼資料的訪問。 
PropertyInfo 擷取某個“屬性”的資訊,並提供對此“屬性”中繼資料的訪問。 
FieldInfo 擷取某個“資料成員”的資訊,並提供對此“資料成員”中繼資料的訪問。 
EventInfo 擷取某個“事件”的資訊,並提供對此“事件”中繼資料的訪問。 
上面列出的這些classes(除ParameterInfo外)的訪問操作,要通過一個Type對象來完成。比如我們要獲得一個裝配件的“成員函數”就要這樣做: 
System.Reflection.Assembly ass=System.Reflection.Assembly.LoadFrom(fileName); 
Type[] tp=ass.GetTypes(); 
System.Reflection.MethodInfo[] mi=tp[0].GetMethods(); 
使用同樣的方法我們還可以得到其它的資訊,如下: 
獲得“建構函式”資訊:System.Reflection.ConstructorInfo[] ci=tp[0].GetConstructors(); 
獲得“屬性”資訊:System.Reflection.PropertyInfo[] pi=tp[0].GetProperties(); 
獲得“資料成員”資訊:System.Reflection.FieldInfo[] fi=tp[0].GetFields(); 
獲得“事件”資訊:System.Reflection.EventInfo[] ei=tp[0].GetEvents(); 
此外,我們可以通過ParameterInfo類來擷取“成員函數”和“建構函式”的參數資訊,如下: 
擷取“成員函數”的參數資訊:System.Reflection.ParameterInfo[] pi=mi[0].GetParameters(); 
擷取“建構函式”的參數資訊:System.Reflection.ParameterInfo[] pi=ci[0].GetParameters(); 
ParameterInfo類有兩個重要的屬性:Name和ParameterType。通過它們我們可以得到“參數”的名稱和資料類型。 
由於.NET將class的資訊以“中繼資料”的形式封裝在程式或是組件中,又提供了一系列可以擷取“中繼資料”的方法,所以我們可以程式運行期間來動態訪問這些資訊。

以下摘自百度:http://zhidao.baidu.com/question/294391411.html
個人膚淺理解,反射實際上就是得到程式集中的屬性和方法.
實現步驟:
1,匯入using System.Reflection;
2,Assembly.Load("程式集")載入程式集,傳回型別是一個Assembly
3,   foreach (Type type in assembly.GetTypes())
            {
                string t = type.Name;
            }
   得到程式集中所有類的名稱
4,Type type = assembly.GetType("程式集.類名");擷取當前類的類型
5,Activator.CreateInstance(type); 建立此類型執行個體
6,MethodInfo mInfo = type.GetMethod("方法名");擷取當前方法
7,mInfo.Invoke(null,方法參數);

本貼原文:http://ziseliuxingzh.blog.163.com/blog/static/51120863200832832311528/

C# System.Reflection (反射)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.