C#【唐老獅】反射

反射

反射概念和關鍵類TYpe

  • 程序集
    • 經由編譯器編譯得到,進一步編譯執(zhí)行的中間產物
      • dll文件
    • 擴展:C語言編譯過程
      • 預處理
      • 編譯
      • 匯編:目標文件
      • 鏈接:可執(zhí)行文件
  • 元數據
    • 描述數據的數據
      • 程序或類型的數據,存放在程序集中
  • 反射概念
    • 運行時(程序加載到內存中變?yōu)檫M程)查看本身或其他程序的元數據的行為
  • 反射作用
    • 運行時得到所有元數據
    • 運行時實例化對象,操作對象
    • 運行時調用其他程序集里的代碼
  • Type:類的反射信息類
    • 獲取Type
      • object.GetType()
      • typeof(類名)
      • Type.GetType("包含命名空間的類名")
      • 指向同一類 元數據的Type引用指向同一個地址
    • 獲取程序集
      • Type.Assembly
    • 獲取所有公共成員
      • MemberInfo類
      • Type.GetMembers()
    • 獲取類的公共構造函數
      • 獲取所有構造函數
        • ConstructorInfo類
        • type.GetConstructors()
      • 獲取其中一個構造函數并執(zhí)行
        • 得到構造函數傳入Type數組(構造函數形參)
          • Type.GetContructor(new Type[0]) 無參構造
          • Type.GetConstuctor(new Type[]{typeof(形參類型)})
        • 執(zhí)行構造函數,傳入object數組(構造函數形參)
          • ConstructorInfo.Invoke(null) 無參構造
          • ConstructorInfo.Invoke(new object[]{實參})
    • 獲取類的公共成員變量
      • 獲取所有成員變量
        • FieldInfo類
        • Type.GetFields()
      • 獲取指定名稱公共成員變量
        • Type.GetField("成員變量名")
      • 通過反射獲取和設置指定對象的值
        • FieldInfo.GetValue(指定對象引用)
        • FieldInfo.SetValue(指定對象引用)
    • 獲取類的公共成員方法
      • MethodInfo類
      • 獲取所有公共方法
        • Type.GetMethods()
      • 獲取指定方法
        • Type.GetMethod("方法名",new Type[]{typeof(形參類型)})
      • 調用方法
        • MethodInfo.Invoke(方法名,new object[]{實參})

反射關鍵類Assembly和Activator

  • Activator
    • 作用
      • 快速實例化對象(靜態(tài)方法)
    • 使用
      • 無參構造
        • Activator.CreateInstance(Type)
      • 有參構造
        • Activator.CreateInstance(Type,實參)
  • Assembly
    • 作用
      • 加載程序集并使用程序集
    • 使用
      • Assembly類
      • 加載指定程序集
        • Assembly.Load("程序集名稱")同一文件下程序集
        • Assembly.LoadFrom("路徑字符串")不同文件下程序集
          • Assembly.LoadFile("路徑字符串")
      • 加載程序集中的類對象
        • Assembly.GetTypes()獲取所有元數據類
        • Assembly.GetType("完整類名")
  • 類庫工程
    • 純邏輯代碼,自身不可執(zhí)行,提供邏輯給別人用
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 概念 反射機制是使程序具有動態(tài)特性的非常關鍵的一種機制 需求1:根據指定的類名,類字段名和所對應的數據,得到該類的...
    沉麟閱讀 1,092評論 0 0
  • 兩個現實中的例子: 1、B超:大家體檢的時候大概都做過B超吧,B超可以透過肚皮探測到你內臟的生理情況。這是如何做到...
    幻凌風閱讀 4,363評論 0 7
  • 本文鏈接:https://blog.csdn.net/weixin_44370124/article/detail...
    一飛同學丶走慢點閱讀 467評論 0 0
  • 反射 反射是無處不在的,MVC、AOP、IOC、ORM、Attribute等等 dll-IL-metadata-反...
    半吊子先生_123c閱讀 269評論 0 0
  • 在.NET中,反射(reflection)是一個運行庫類型發(fā)現的過程。使用反射服務,可以通過編程使用一個友好的對象...
    丑小丫大笨蛋閱讀 3,140評論 0 8

友情鏈接更多精彩內容