[C#] 拿個鏡子看自己 - Reflection
Reflection ,中文我通常稱呼他為 映射 或 鏡射 ,就如石頭閒語那篇文章所述,他就像是拿著鏡子在 Object 前面,讓 Object 知道他自己的樣子,或許有人有使用過 Reflector ,拿著他就像拿著一面照妖鏡似的,可以照出許許多多以 .Net 開發的程式碼的原型(當然,加過殼的就照不回來了)
事實上該功能在許多物件導向程式語言上都有,如 Java, C#, VB.Net, PHP5, and more,雖然在 PHP5 上使用 Reflection 似乎略顯多餘。
那提到 Reflector ,是不是有人會想到一個問題,就是如果你寫出來的程式完全沒加過殼,人家只要抓下來,透過該程式,可以一覽無遺,那為啥這些高階語言還要提供 Reflection 的功能呢?主要是為了增加程式的彈性,以 C++ 為例,兩類別間的互動通常都在編譯前就決定了(並非一定,其實有人有提出一些在 C++ 達到 Reflection 的想法,但比起原本就有提供該功能的程式語言,那個複雜了許多),而在 C# 上,你完全可以在執行階段動態的去檢視某物件的所有成員,呼叫其中的方法,甚至可以動態載入其他的 dll 檔並呼叫其中的方法... 好吧,dll的動態載入其實不是個很新的技術,不同的是在具備 Reflection 的架構下,你可以不用知道他的類別名,函數名,反正都可以靠映射得知
這樣有什麼好處呢?你完全可以達到分工的目的,你可以將某些功能的名字給指定,然後就交給其他人去開發,那甚至不用要求他們要繼承某個指定的類別或介面,反正 Reflection 都可以幫你動態載入並執行
那程式不寫死,就能降低所謂的相依性,而且既然能分工,也就是達到至少部份已經模組化了,那模組化的好處就是可以重覆使用,再來是因為他是外部的類別庫,該模組更新時你只要重新編譯該模組就好,而無需整個專案全部都重新編譯。
我想我或許講的不夠完整,或理解的並不深刻(可是偏偏有點想不出來該寫些什麼才好),所以如果有任何指教都歡迎留言來討論
並且可以參考下面的幾個參考網址,他們每個我想對 Reflection 都有自己獨特的見解。
Reference:
事實上該功能在許多物件導向程式語言上都有,如 Java, C#, VB.Net, PHP5, and more,雖然在 PHP5 上使用 Reflection 似乎略顯多餘。
那提到 Reflector ,是不是有人會想到一個問題,就是如果你寫出來的程式完全沒加過殼,人家只要抓下來,透過該程式,可以一覽無遺,那為啥這些高階語言還要提供 Reflection 的功能呢?主要是為了增加程式的彈性,以 C++ 為例,兩類別間的互動通常都在編譯前就決定了(並非一定,其實有人有提出一些在 C++ 達到 Reflection 的想法,但比起原本就有提供該功能的程式語言,那個複雜了許多),而在 C# 上,你完全可以在執行階段動態的去檢視某物件的所有成員,呼叫其中的方法,甚至可以動態載入其他的 dll 檔並呼叫其中的方法... 好吧,dll的動態載入其實不是個很新的技術,不同的是在具備 Reflection 的架構下,你可以不用知道他的類別名,函數名,反正都可以靠映射得知
這樣有什麼好處呢?你完全可以達到分工的目的,你可以將某些功能的名字給指定,然後就交給其他人去開發,那甚至不用要求他們要繼承某個指定的類別或介面,反正 Reflection 都可以幫你動態載入並執行
那程式不寫死,就能降低所謂的相依性,而且既然能分工,也就是達到至少部份已經模組化了,那模組化的好處就是可以重覆使用,再來是因為他是外部的類別庫,該模組更新時你只要重新編譯該模組就好,而無需整個專案全部都重新編譯。
我想我或許講的不夠完整,或理解的並不深刻(可是偏偏有點想不出來該寫些什麼才好),所以如果有任何指教都歡迎留言來討論
並且可以參考下面的幾個參考網址,他們每個我想對 Reflection 都有自己獨特的見解。
Reference:
留言
張貼留言