原始出處 、作者資訊和本宣告。否則將追究法律責任。
我們繼續c#基礎知識的學習,這篇文章主要要講的是我們c#程式設計師邁向高階c#程式設計師的關鍵性的一步。
有的朋友會說事實不是這樣的,我不用反射就不能開發嗎?當然可以,但是用與不用肯定是不一樣的,任何複雜抽象的分層架構或者說是複雜的設計模式均是建立在這些基礎之上的,比如我們要進行模組化、元件化開發,要嚴格的消除模組之間的耦合,要進行動態介面呼叫。這樣的強大而靈活的系統開發,必須要用反射才行;任何技術都有它存在的價值和意義,只要我們把它用在合適的位置就能發揮出驚人的力量;能盡可能的減少我們編寫的**,更能是我們的**便的清晰簡潔;
下面我們就來學習c#中的反射的概念以及怎麼使用它,用它能為我們提供什麼樣的好處,更重要的是能否將我們的技術台階提公升乙個高度;
1.什麼叫反射
自然解釋:射是一種自然現象,表現為受刺激物對刺激物的逆反應;這是反射的字面解釋,我們看一下計算機程式設計中的反射;
程式設計解釋:通過 system.reflection
命名空間中的類以及 system.type
,您可以獲取有關已載入的程式集
和在其中定義的型別(如類
、介面和值型別
)的資訊。
您也可以使用反射在執行時建立型別例項,以及呼叫和訪問這些例項。這是來自微軟官方的msdn定義;
這幅圖我想還是比較形象的,至少在我們腦子裡已經有了這麼乙個概念,反射、反射就是通過某種中間裝置獲取到另一端的東西。
c#裡面反射跟上面的概念是一樣的,原理也是一樣的,下面我們就用**示例來進行講解,我想通過本篇文章的學習,您一定可以很透徹的理解反射的概念。
2.c#反射示例
在我的解決方案裡面有兩個專案,reflection是控制台應用程式,testdll是我們所要反射的專案,在這個專案裡面我定義了乙個math類,也就是我們要反射的物件;
為了演示方便,我們需要設定一下testdll專案的生成輸出路徑,也就是我們主程式的啟動目錄;
這樣設定之後,我們專案的輸出檔案就會在我們應用程式的啟動目錄中,反射也就會方便一點,為了讓初學者能少走彎路,我就費點事加上了;
按f6編譯一下,會輸出testdll.dll檔案到reflection的debug目錄中,我們切換到reflection中的main方法中開始進行反射操作;
using我在math類中定義了乙個靜態方法add,在這裡我們就可以通過反射拿到math物件進行動態呼叫了;system;
using
system.collections.generic;
using
system.text;
using
system.reflection;
using
system.diagnostics;
namespace
reflection
);
console.writeline(
"invoke method:"
+ count.tostring());
console.readline();
} }
}
assembly物件就好比我們日常生活中的鏡子,我用這個鏡子去照一下外部的dll檔案,那個檔案裡面的所有資料就可以反射給我了,我在通過託管物件進行一系列的獲取呼叫了;具體的物件讀者可以上網搜搜,大牛們講解的比我詳細,我只是做個入門介紹而已
總結:是不是用反射很神奇,我感覺反射真的很強大,這篇文章只是反射的乙個簡單的應用,後面我會講解利用反射進行高配置的應用系統開發;其實要想掌握一門語言的語法不難,難的是語言背後的原理。軟體是對硬體程式設計、軟體的一切邏輯都是硬體的處理過程;所以我們當務之急就是快速的學會使用一門語言,然後去學習真正的軟體奧秘;謝謝
本文出自 「謙虛若愚、求知如渴」 部落格,請務必保留此出處
反射理解1
web框架的核心在於反射。這需要操作xml檔案和class物件來實現。反射應用於在編譯時無法知道傳遞過來的引數是什麼物件,只有在執行時才知道的情況下。通過反射能獲取已裝載類的屬性 方法 構造方法等資訊。它將程式 訪問裝載到jvm中的類的內部資訊。class物件 獲取class物件的方法 1 通過cl...
反射的理解
反射 1 類的物件 依據我們定義的類 new 出來的物件,也成為例項物件 2 類物件 是類載入的產物,包括 包名,類名,屬性,方法,構造方法 獲取類物件 方式 通過反射的技術獲取類物件 會導致類先進行類載入 通過 類的物件 獲取 類物件 student s new student class c s...
反射理解1
web框架的核心在於反射。這需要操作xml檔案和class物件來實現。反射應用於在編譯時無法知道傳遞過來的引數是什麼物件,只有在執行時才知道的情況下。通過反射能獲取已裝載類的屬性 方法 構造方法等資訊。它將程式 訪問裝載到jvm中的類的內部資訊。class物件 獲取class物件的方法 1 通過cl...