<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      happyhippy

      這個(gè)世界的問題在于聰明人充滿疑惑,而傻子們堅(jiān)信不疑。--羅素

      1. 反射簡介   
      2. 使用反射
      3. 反射調(diào)用方法的執(zhí)行機(jī)制

       

      1. 反射簡介

          程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對(duì)象。您可以使用反射動(dòng)態(tài)地創(chuàng)建類型的實(shí)例,將類型綁定到現(xiàn)有對(duì)象,或從現(xiàn)有對(duì)象中獲取類型。然后,可以調(diào)用類型的方法或訪問其字段和屬性。(FROM MSDN)

       

      2. 使用反射

      2.1 反射對(duì)象模型(FROM 《Essential.Net》)

       

      2.2 反射類型的層次結(jié)構(gòu)(FROM 《Essential.Net》)

       

      2.3 各個(gè)對(duì)象的創(chuàng)建方式和功能

      對(duì)象 創(chuàng)建該對(duì)象 功能(FROM MSDN)
      Assembly Assembly.Load
      Assembly.LoadFile
      Assembly.LoadFrom
      使用 Assembly 定義和加載程序集,加載在程序集清單中列出的模塊,以及從此程序集中查找類型并創(chuàng)建該類型的實(shí)例。
      Module Assembly.GetModule
      Assembly.GetModules

      使用 Module 發(fā)現(xiàn)以下信息:包含模塊的程序集以及模塊中的類等。您還可以獲取在模塊上定義的所有全局方法或其他特定的非全局方法。

      ConstructorInfo Type.GetConstructor
      Type.GetConstructors
      Type.GetConstructorImpl

      使用 ConstructorInfo 發(fā)現(xiàn)以下信息:構(gòu)造函數(shù)的名稱、參數(shù)、訪問修飾符(如 publicprivate)和實(shí)現(xiàn)詳細(xì)信息(如 abstractvirtual)等。使用 TypeGetConstructorsGetConstructor 方法來調(diào)用特定的構(gòu)造函數(shù)。

      MethodInfo Type.GetMethod
      Type.GetMethods
      Type.GetMethodImpl
      使用 MethodInfo 發(fā)現(xiàn)以下信息:方法的名稱、返回類型、參數(shù)、訪問修飾符(如 publicprivate)和實(shí)現(xiàn)詳細(xì)信息(如 abstractvirtual)等。
      FieldInfo Type.GetField
      Type.GetFields
      使用 FieldInfo 發(fā)現(xiàn)以下信息:字段的名稱、訪問修飾符(如 publicprivate)和實(shí)現(xiàn)詳細(xì)信息(如 static)等;并獲取或設(shè)置字段值。
      EventInfo Type.GetEvent
      Type.GetEvents
      使用 EventInfo 發(fā)現(xiàn)以下信息:事件的名稱、事件處理程序數(shù)據(jù)類型、自定義屬性、聲明類型和反射類型等;并添加或移除事件處理程序。
      PropertyInfo Type.GetProperty
      Type.GetProperties
      Type.GetPropertyImpl
      使用 PropertyInfo 發(fā)現(xiàn)以下信息:屬性的名稱、數(shù)據(jù)類型、聲明類型、反射類型和只讀或可寫狀態(tài)等;并獲取或設(shè)置屬性值。
      ParameterInfo MethodBase.GetParameters 使用 ParameterInfo 發(fā)現(xiàn)以下信息:參數(shù)的名稱、數(shù)據(jù)類型、參數(shù)是輸入?yún)?shù)還是輸出參數(shù),以及參數(shù)在方法簽名中的位置等。
          當(dāng)您在一個(gè)應(yīng)用程序域的僅反射上下文中工作時(shí),請(qǐng)使用 CustomAttributeData 來了解有關(guān)自定義屬性的信息。使用 CustomAttributeData,您不必創(chuàng)建屬性的實(shí)例就可以檢查它們。

       

      2.4  反射調(diào)用實(shí)例

      namespace NameSpace
      {
          internal class Reflect
          {
              private int Add(int arg0, int arg1, int arg2)
              {
                  return arg0 + arg1 + arg2;
              }
          }
       
          class Program
          {
              internal static int CallAdd()
              {
                  //指定TypeName創(chuàng)建對(duì)象實(shí)例
                  object target = Assembly.GetExecutingAssembly().CreateInstance("NameSpace.Reflect", true);
       
                  //取得方法
                  Type type = target.GetType();
                  MethodInfo methodInfo = type.GetMethod("Add", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
       
                  if (methodInfo == null)
                      return 0;
       
                  object[] args = new object[] { 10, 20, 30 };
                  object result = methodInfo.Invoke(target, args); //調(diào)用
                  return Convert.ToInt32(result);
              }
          }
      }

       

      3. 反射調(diào)用方法的執(zhí)行機(jī)制

          MethodInfo.Invoke使用提供的對(duì)象引用和參數(shù)來調(diào)用底層方法。其執(zhí)行過程如下(FROM 《Essential.Net》):
      (1). 構(gòu)建一個(gè)堆棧幀;
      (2). 將參數(shù)值拷貝到堆棧上;
      (3). 調(diào)用目標(biāo)方法(IA-32處理器的call指令);
      (4). 方法執(zhí)行完畢后,Invoke識(shí)別按引用傳遞的參數(shù),并將他們拷貝回參數(shù)值數(shù)組中;
      (5). 如果方法有返回值,則將該值作為Invoke的返回值。

          下圖展示了上面2.4中示例代碼的執(zhí)行過程:

       

      補(bǔ)充:
      1. 有關(guān)堆棧幀,可以參考:《Reversing:逆向工程揭密堆棧幀
      2. 上圖中,展示的是fastcall調(diào)用約定,fastcall調(diào)用約定通常使用ECX寄存器和EDX寄存器來分別存放第一個(gè)參數(shù)和第二個(gè)參數(shù)。有關(guān)調(diào)用約定,可以參考:《Reversing:逆向工程揭密調(diào)用約定

      posted on 2009-03-29 18:52  Silent Void  閱讀(2073)  評(píng)論(0)    收藏  舉報(bào)

      主站蜘蛛池模板: 欧美乱码伦视频免费| 亚洲一区二区三区激情在线| 亚洲国产另类久久久精品网站| 免费人成在线观看品爱网| 国产地址二永久伊甸园| 石棉县| 屯昌县| 性做久久久久久久久| 国产小视频一区二区三区| av在线播放国产一区| 亚洲精品一区二区三天美| 97av麻豆蜜桃一区二区| 精品一区二区三区不卡| 久久国内精品自在自线91| 日本无遮挡吸乳呻吟视频| 亚洲精品色哟哟一区二区| 午夜高清福利在线观看| 人妻夜夜添夜夜无码av| 国产精品日韩中文字幕| 国产中文字幕日韩精品| 久久亚洲av综合悠悠色| 亚洲精品777| 在线 欧美 中文 亚洲 精品| 国产精品一区二区三区黄色| 国产人妻精品一区二区三区不卡| 国内精品伊人久久久影视| 高潮潮喷奶水飞溅视频无码| 成人做爰69片免费看网站野花| 亚洲精品美女久久久久9999| 成午夜福利人试看120秒| 亚洲理论在线A中文字幕| 亚洲色大成网站WWW久久| 日韩一级伦理片一区二区| 亚洲色精品vr一区区三区| 武平县| 国产精品一区二区不卡视频| 麻豆国产成人AV在线播放| 7878成人国产在线观看| 亚洲男人成人性天堂网站| 又长又粗又爽又高潮的视频| 日韩一区二区三区三级|