2010-10-25 43 views
1

我在互聯網上關於反射的紅色,我也理解了一些代碼,但問題是我真的無法得到什麼是反射的用途,我應該在哪裏使用它。 可能有些人請使用示例向我解釋這一點。asp.net中的反射

+0

這裏是一組關於這個主題的問題和答案:http://stackoverflow.com/questions/tagged/reflection?sort=votes&pagesize=50 – Andrey 2010-10-25 12:32:21

回答

2

提供示例,我不能做比谷歌更好的工作。如果你可以閱讀這個頁面,你可以谷歌。但用法包括:

1)WPF:所有的結合是基於反射,這樣的框架使用反射來德做工作。它是如何綁定到您在XAML中定義的屬性的。

2)Pluggins:加載的組件,並通過類型循環和或許創建特定類型的對象和在其上運行的方法。

3)ASP.NET MVC:路由是基於反射

2

documentation

在System.Reflection命名空間用的System.Type的類,在一起,使您獲得信息關於加載的程序集及其中定義的類型,例如類,接口和值類型。您還可以使用反射在運行時創建類型實例,並調用和訪問它們。有關反射特定方面的主題,請參閱本概述末尾的「相關主題」。

例如,假設您有一個方法需要一個參數類型爲object的方法。您知道該對象有一個名爲Name的屬性,但您不知道對象的具體類型,因此您無法投射它。但是,使用反射,你仍然可以得到在該屬性:

public string GetName(object o) 
    { 
     string name = (string) o.GetType().GetProperty("Name").GetValue(o, null); 
     return name; 
    } 
1

簡稱:

反思是你來自哪裏,代碼可以查詢的名稱屬性或方法的對象的一種手段。

例如在APS.NET頁面使用了用戶控件可以檢查母版具有用於連接到數據庫的DB屬性,如果因此使用它,否則創建自己的連接。

這樣,它不會創建不必要的連接,同時在沒有主控的頁面中仍然易於使用。

2

你在哪裏「應該」使用它是你需要使用它。反射是其中一種情況,如果你不需要它,你不會注意到它的存在,但是當你需要它時,你很高興它在那裏。

簡而言之,反射就是在運行時發現和檢查代碼的一種方式,它在編譯時不可用。如果您的應用程序需要的所有內容都可以在編譯時使用,那麼您將永遠不需要反思。但是,如果您正在編寫易於擴展和修改的應用程序,那麼您將會使用大量反思。

下面是一個示例:Workflow Foundation 4.爲了創建工作流程組件,您通常必須深入瞭解WF4如何運行,以便在運行時調用CacheMetadata方法時正確配置組件。爲了便於創建組件,WF團隊實現了CacheMetadata的基本方法,以便它使用反射來檢查組件是如何實現的(它具有哪些In和OutArguments和Variables)。通過這種方式,基本實現可以在運行時正確配置活動,而無需擡起手指。這是基礎Activity類在幾個月或幾個月前編譯時無法完成的,因爲您的Activity尚不存在。