當前位置:編程學習大全網 - 編程語言 - .NET簡談反射(動態調用)

.NET簡談反射(動態調用)

 我們繼續C#基礎知識的學習 這篇文章主要要講的是我們C#程序員邁向高級C#程序員的關鍵性的壹步

 有的朋友會說事實不是這樣的 我不用反射就不能開發嗎?當然可以 但是用與不用肯定是不壹樣的 任何復雜抽象的分層架構或者說是復雜的設計模式均是建立在這些基礎之上的 比如我們要進行模塊化 組件化開發 要嚴格的消除模塊之間的耦合 要進行動態接口調用 這樣的強大而靈活的系統開發 必須要用反射才行 任何技術都有它存在的價值和意義 只要我們把它用在合適的位置就能發揮出驚人的力量 能盡可能的減少我們編寫的代碼 更能是我們的代碼便的清晰簡潔

 下面我們就來學習C#中的反射的概念以及怎麽使用它 用它能為我們提供什麽樣的好處 更重要的是能否將我們的技術臺階提升壹個高度

  什麽叫反射

 要想快速的學習壹種技術 首先我們要明白這個技術是幹什麽的 我們需要有個大局觀 需要有個總體的認識了解 才能發揮出每個人本能的理解能力 而不是拉著妳來理解我的想法 只有這樣我們才能學的更快 不知不覺我們就能形成自己壹套獨立的思考能力 [王清培版權所有 轉載請給出署名]

 自然解釋 射是壹種自然現象 表現為受 *** 物對 *** 物的逆反應 這是反射的字面解釋 我們看壹下計算機編程中的反射

 編程解釋 通過 System Reflection 命名空間中的類以及 System Type 您可以獲取有關已加載的程序集和在其中定義的類型(如類 接口和值類型)的信息 您也可以使用反射在運行時創建類型實例 以及調用和訪問這些實例 這是來自微軟官方的MSDN定義

 通過這兩者的比較 我想對於我們初學者來說 反射就是通過某種事物去反射另壹種事物 我們小時候進行喜歡用鏡子對著墻上照 會出現壹個個小光圈 這就是很典型的反射例子 我們把它理解成計算機裏的反射就是我用某中對象去反射我無法直接獲取到的東西

 

 

 這幅圖我想還是比較形象的 至少在我們腦子裏已經有了這麽壹個概念 反射 反射就是通過某種中間設備獲取到另壹端的東西

 C#裏面反射跟上面的概念是壹樣的 原理也是壹樣的 下面我們就用代碼示例來進行講解 我想通過本篇文章的學習 您壹定可以很透徹的理解反射的概念

  C#反射示例

  ?

 在我的解決方案裏面有兩個項目 Reflection是控制臺應用程序 TestDll是我們所要反射的項目 在這個項目裏面我定義了壹個Math類 也就是我們要反射的對象

 為了演示方便 我們需要設置壹下TestDll項目的生成輸出路徑 也就是我們主程序的啟動目錄

 

  這樣設置之後 我們項目的輸出文件就會在我們應用程序的啟動目錄中 反射也就會方便壹點 為了讓初學者能少走彎路 我就費點事加上了

 按F 編譯壹下 會輸出TestDll dll文件到Reflection的Debug目錄中 我們切換到Reflection中的Main方法中開始進行反射操作

 view sourceprint?

 using System;

 using System Collections Generic;

 using System Text;

 using System Reflection;

 using System Diagnostics;

 namespace Reflection

 {

 class Program

 {

 static void Main(string[] args)

 {

 Assembly dll = Assembly LoadFile(Environment CurrentDirectory + \\TestDll dll )

 Type math = dll GetType( TestDll Math true)

 MethodInfo method = math GetMethod( add )

 int count = (int)method Invoke(null new object[] { })

 Console WriteLine( Invoke Method: + count ToString())

 Console ReadLine()

 }

 }

 }

 我在Math類中定義了壹個靜態方法add 在這裏我們就可以通過反射拿到Math對象進行動態調用了

 Assembly對象就好比我們日常生活中的鏡子 我用這個鏡子去照壹下外部的DLL文件 那個文件裏面的所有數據就可以反射給我了 我在通過托管對象進行壹系列的獲取調用了 具體的對象讀者可以上網搜搜 大牛們講解的比我詳細 我只是做個入門介紹而已

lishixinzhi/Article/program/net/201311/13536

  • 上一篇:用Kotlin改寫PHP程序是什麽樣的體驗
  • 下一篇:.net是什麽?為什麽還有ASP.NET和JAVA.NET等等區別?
  • copyright 2024編程學習大全網