»
遊客:
加入
|
登入
(帳號有問題請連絡TWed2k@gmail.com)
TWed2k
»
程式開發討論區
» [求助]關於Reflection
可打印版本
|
推薦給朋友
|
訂閱主題
|
收藏主題
|
純文字版
論壇跳轉 ...
主題:
[其他]
[求助]關於Reflection
字型大小:
小
|
中
|
大
|
巨
←
→
Dr.J
銅驢友〔初級〕
今日心情
. 積分:
129
. 文章:
813
. 收花: 908 支
. 送花: 294 支
. 比例: 0.32
. 在線: 2040 小時
. 瀏覽: 1070 頁
. 註冊:
8207
天
. 失蹤:
2706
天
#1 : 2011-8-1 08:14 AM
只看本作者
送花
(3)
送出中...
不知道有沒有大大可以幫我講解一下Reflection這個東東到底有什麼作用Orz
我去看了一下MSDN跟Google了一下資料,看起來好像是可以反射出自己的狀態?
好像是在編碼之前就可以知道自己的樣子......
可是還是不曉得這個東東到底有什麼用QQ
懇請各位大大賜教一下m(_ _)m
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接
快速回覆
送出中...
Litfal
銀驢友〔初級〕
寫奇怪的程式中
. 積分:
486
. 文章:
322
. 收花: 4068 支
. 送花: 3976 支
. 比例: 0.98
. 在線: 965 小時
. 瀏覽: 7522 頁
. 註冊:
6475
天
. 失蹤:
3456
天
#2 : 2011-8-13 09:38 PM
只看本作者
送花
(9)
送出中...
反射就是...
簡單的說,就是在程式碼
執行階段
才參考其他來源並使用的方法。
平常參考DLL都怎麼做?
很簡單,在
設計階段
參考,並Coding使用就好了不是?
那假設今天有一個情況:
你今天寫了一個外觀很炫的player,但是目前只支援wav。
但是你留了一個介面作為"插座",只要符合這個介面寫的解析格式用dll,你就可以動態引用並支援該介面。
今天一個很欣賞你程式的人為你完成了mp3與wma版的dll,然後呢?
你該不會要設計階段引用->重新編譯一次->再發布一次來支援吧?
既然"插座"都準備好了,要提供什麼電器電源,不應該重新搞一下插座吧?
這種狀況,AP端會使用反射讀取某些DLL(通常會定義丟到某資料夾、或是提供[載入]的功能),以達成主程式不改版,但利用插件方式支援更多功能的能力。
另外還有一個用法:
在程式寫程式,並動態編譯後反射引用。
可以處理一些script案例、或是用以製作大量反覆運算的專一版函式以加速。
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接
快速回覆
送出中...
Dr.J
銅驢友〔初級〕
今日心情
. 積分:
129
. 文章:
813
. 收花: 908 支
. 送花: 294 支
. 比例: 0.32
. 在線: 2040 小時
. 瀏覽: 1070 頁
. 註冊:
8207
天
. 失蹤:
2706
天
#3 : 2011-9-1 11:35 PM
只看本作者
送花
(0)
送出中...
終於有人回了,非常感謝樓上的大大QQ
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接
快速回覆
送出中...
agogoman
鐵驢友〔初級〕
. 積分:
29
. 文章:
32
. 收花: 85 支
. 送花: 358 支
. 比例: 4.21
. 在線: 774 小時
. 瀏覽: 19772 頁
. 註冊:
6981
天
. 失蹤:
40
天
. TW
#4 : 2011-9-10 04:06 AM
只看本作者
送花
(3)
送出中...
reflection, 其實就是以前講的RTTI,
用.net的話 建議使用前先服用
http://msdn.microsoft.com/en-us/magazine/cc163759.aspx
, 以免為了方便, 損失了效能.
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接
快速回覆
送出中...
ycring
鐵驢友〔初級〕
. 積分:
22
. 文章:
4
. 收花: 19 支
. 送花: 4 支
. 比例: 0.21
. 在線: 311 小時
. 瀏覽: 20668 頁
. 註冊:
7159
天
. 失蹤:
767
天
#5 : 2011-10-1 08:57 PM
只看本作者
送花
(3)
送出中...
通當這個功能是用來開發比較"底層"的程式....
例如你需要一個可以將A物件的屬性值,複製到一個B物件的屬性值中
如果沒有Refleciton...你可以
B.Property1=A.Property1;
B.Property2=A.Property2;
B.Property3=B.Property3;
但用Reflection,可以只用一個"迴圈"就處理掉.. (而且只要2個物件有相同的屬性,都可以複製)
可以參考 (與PropertyInfo這個物類別操作的程式)
http://www.google.com.tw/search? ... 0l0l134l239l0.2l2l0
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接
快速回覆
送出中...
agogoman
鐵驢友〔初級〕
. 積分:
29
. 文章:
32
. 收花: 85 支
. 送花: 358 支
. 比例: 4.21
. 在線: 774 小時
. 瀏覽: 19772 頁
. 註冊:
6981
天
. 失蹤:
40
天
. TW
#6 : 2011-10-12 04:13 PM
只看本作者
送花
(3)
送出中...
追加一個Example, 假設我們有一個List<ClassA> 這樣的陣列.
假如 我們沒辦把知道 呼叫者 希望用哪了 ClassA的Property來排序. 我們可以透過下面的方式來達成:
list.Sort(delegate(ClassA obj1,ClassA obj2) {
if (sortingorder)
return ((IComparable)typeof(ClassA).GetProperty(sortingfield).GetValue(obj1, null))).CompareTo(
((IComparable)(typeof(ClassA).GetProperty(sortingfield).GetValue(obj2, null))));
else
return ((IComparable)(typeof(ClassA).GetProperty(sortingfield).GetValue(obj2, null))).CompareTo(
((IComparable)(typeof(ClassA).GetProperty(sortingfield).GetValue(obj1, null))));
});
來達成 排序的動作
簡單來說 就是在process運作中抓到物件(Type/Class)的資料(Instance) 然後來動態作運算
不過除了上述的performance要注意外, 當大型專案的時候 也要小心造成issue tracking/sustain上的困難
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接
快速回覆
送出中...
快速回覆
表情符號
更多 Smilies
字型大小 :
小
|
中
|
大
|
巨
[完成後可按 Ctrl+Enter 發佈]
溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別
關閉
表情符號
關閉
Discuz! 代碼
使用個人簽名
接收新回覆信件通知
發表時自動複製內容
[立即複製]
(IE only)
論壇跳轉 ...
所在時區為 GMT+8, 現在時間是 2024-11-22 12:25 AM
清除 Cookies
-
連絡我們
-
TWed2k
© 2001-2046
-
純文字版
-
說明
Discuz!
0.1
| Processed in 0.031989 second(s), 8 queries , Qzip disabled