<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Fernando Vezzali - Microsoft Certified Professional Developer : List</title><link>http://weblogs.asp.net/fernandovezzali/archive/tags/List/default.aspx</link><description>Tags: List</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Reflection</title><link>http://weblogs.asp.net/fernandovezzali/archive/2008/08/26/reflection.aspx</link><pubDate>Tue, 26 Aug 2008 22:10:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6569442</guid><dc:creator>ferps</dc:creator><author>ferps</author><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/fernandovezzali/rsscomments.aspx?PostID=6569442</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/fernandovezzali/commentapi.aspx?PostID=6569442</wfw:comment><comments>http://weblogs.asp.net/fernandovezzali/archive/2008/08/26/reflection.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Reflection é um recurso muito poderoso do Framework da Microsoft, porém não é novidade para ninguém. O motivo desse post é ilustrar um uso prático de reflection. &lt;/P&gt;
&lt;P mce_keep="true"&gt;No nosso exemplo,&amp;nbsp;queremos listar em &lt;EM&gt;run time&lt;/EM&gt; todas as propriedades de uma classe como se elas fossem itens de uma coleção.&lt;/P&gt;
&lt;P mce_keep="true"&gt;A classe em questão herda de object e não implementa nenhuma interface que possibilite iteração, nesse caso somente com reflection poderemos listar as propriedades.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Abaixo segue a implementação sugerida:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;class&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#2b91af size=2&gt;Program&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; Main(&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;[] args)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#2b91af size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;Person&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; oPerson = &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#2b91af size=2&gt;Person&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oPerson.iAge = 27;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oPerson.sName = &lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"Fernando Vezzali"&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#2b91af size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;PropertyInfo&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;[] properties = oPerson.GetType().GetProperties();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;foreach&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; (&lt;/FONT&gt;&lt;FONT face="Courier New" color=#2b91af size=2&gt;PropertyInfo&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; oPropertyInfo &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; properties)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#2b91af size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;MethodInfo&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; oMethodInfo = &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;oPerson.GetType().GetMethod(&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"get_" &lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;+&amp;nbsp;oPropertyInfo.Name);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#2b91af size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;ParameterInfo&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;[] ArrParameterInfo = oPerson.GetType().GetMethod(&lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;"get_"&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; + oPropertyInfo.Name).GetParameters();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#2b91af size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;Console&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;.WriteLine(oPropertyInfo.Name + &lt;/FONT&gt;&lt;FONT face="Courier New" color=#a31515 size=2&gt;" = "&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; + oMethodInfo.Invoke(oPerson, ArrParameterInfo));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#2b91af size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;Console&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;.Read();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;class&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#2b91af size=2&gt;Person&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;private&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; _iAge;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;private&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; _sName;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;public&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; iAge&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;get&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; { &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; _iAge; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;set&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; { _iAge = &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;value&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;public&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; sName&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;get&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; { &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; _sName; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;set&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; { _sName = &lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;value&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Solution: &lt;A href="http://weblogs.asp.net/blogs/fernandovezzali/ReflectionProject.zip" mce_href="http://weblogs.asp.net/blogs/fernandovezzali/ReflectionProject.zip"&gt;ReflectionProject.zip&lt;/A&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6569442" width="1" height="1"&gt;</description><enclosure url="http://weblogs.asp.net/fernandovezzali/attachment/6569442.ashx" length="23385" type="application/x-zip-compressed" /><category domain="http://weblogs.asp.net/fernandovezzali/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/fernandovezzali/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/fernandovezzali/archive/tags/Reflection/default.aspx">Reflection</category><category domain="http://weblogs.asp.net/fernandovezzali/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://weblogs.asp.net/fernandovezzali/archive/tags/List/default.aspx">List</category><category domain="http://weblogs.asp.net/fernandovezzali/archive/tags/Properties/default.aspx">Properties</category><category domain="http://weblogs.asp.net/fernandovezzali/archive/tags/foreach/default.aspx">foreach</category><category domain="http://weblogs.asp.net/fernandovezzali/archive/tags/Property/default.aspx">Property</category><category domain="http://weblogs.asp.net/fernandovezzali/archive/tags/Collection/default.aspx">Collection</category></item></channel></rss>