2010-06-23 33 views
26

我在msdn上閱讀了一篇關於reflection的文章,但我甚至無法理解它的利用率,即10%。什麼是C#反射,有什麼好處。如何使用它來獲得好處

請您簡單介紹一下我的反思,以及如何從中受益。

+0

可能的重複:http://stackoverflow.com/questions/1897712 ... http://stackoverflow.com/questions/1859902 – 2010-06-23 12:35:57

+0

[反射。我們可以使用它來實現什麼?](http://stackoverflow.com/questions/1897712/reflection-what-c​​an-we-achieve-using-it) – 2010-06-23 12:39:00

+0

對所有人:我仍然無法得到,我是如何得到好處的。你們中的任何一個人都可以引用一個最簡單的例子:編碼幫助代碼更具可重用性和功能方面的優勢 – 2010-06-23 12:53:53

回答

5

反射是類型提供自己信息的能力。例如,一個程序集可以告訴你它包含了什麼,一個類型可以告訴你它的方法,屬性等等。

動態提供這些信息在很多方面都很有用。一個簡單的例子就是Web服務使用的元數據 - 當一個人「消費」一個Web服務時,會爲其客戶端生成一個代理類。此代理是從WSDL文檔生成的,並且通常是通過反射生成的類型元數據生成的。

另一個簡單的例子是動態加載類型以執行某些工作單元。我所從事的一個項目利用反射來從數據庫加載「規則」以應用於系統中的輸入。

7

通過反射,您的代碼可以調用編譯代碼時不知道的方法和屬性。其中一個使用此類的內置類是XmlSerializer。您可以將任何要轉換爲XML的對象傳遞給它。它詢問對象它的所有屬性都使用了反射,然後能夠生成一個包含所需元素來表示對象的XML文檔。

37

反射允許您編寫可以檢查有關代碼本身的各個方面的代碼。

它可以讓您做簡單的事情,如:

  1. 檢查對象在運行時的類型(簡單的調用typeof()例如)

  2. 檢查對象的屬性在運行時改變一種方法的行爲(.NET中的各種序列化方法)

更復雜的任務如:

  1. 在運行時加載程序集,查找特定類,確定它是否與給定接口匹配,以及動態調用某些成員。

較早的是更爲常見的用法。後者對於爲其應用程序的插件架構開發人員或希望在運行時交換程序集的人員有所幫助,具體取決於配置更改。

12

反射是一種讓您以編程方式在運行時發現類型的方法。這是非常重要的,因爲.NET語言是強類型的。能夠訪問元數據非常有用。

現在的一件大事(流暢的接口/適配器)很大程度上依賴於反射。特別是,靜態反射非常大。如果你想看到具體的例子和靜態反射的一個很好的解釋,請上網:

http://jagregory.com/writings/introduction-to-static-reflection/
http://www.lostechies.com/blogs/gabrielschenker/archive/2009/02/03/dynamic-reflection-versus-static-reflection.aspx

當然,這反映在一般的一小部分。如果您想了解更多關於反射的一般用法的信息,請查看Apress Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition,第16章。它深入研究了.NET類型系統以及在庫和運行時如何使用它。

1

反射可以幫助您進行元編程,這無疑是最酷的編程技術之一。谷歌元編程瞭解更多信息。

0

一個反思的好處是,它可以讓您保存在數據集設計就像一個事務中的所有變化,SQL

0

反思是在asp.net提供強大的命名空間。通過使用它,我們可以創建動態對象運行時並調用它,它主要用於開發框架類型應用程序。

+2

反射不屬於ASP.NET或任何其他.NET技術,因爲它是調查無論您使用的項目類型如何,都可以在運行時裝配一個Assembly。 – graumanoz 2017-02-06 07:11:46