<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1411082144549364087</id><updated>2024-09-02T12:49:58.088+05:30</updated><category term="ASP.NET"/><category term="C#"/><category term="CSS3"/><category term="How to hack android device"/><category term="MAC"/><category term="Mac Spoofing"/><category term="Spoofing"/><category term="hack"/><category term="hack facebook"/><category term="hack line"/><category term="hack mcent"/><category term="hack whatsapp"/><category term="hake hike"/><category term="hake wechat"/><title type='text'>Future Technologies Solution</title><subtitle type='html'>EllOR</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1411082144549364087.post-5601856068617646891</id><published>2017-07-28T12:27:00.001+05:30</published><updated>2017-07-28T12:28:29.031+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="How to hack android device"/><title type='text'>Android hacking</title><content type='html'>https://youtu.be/noEdPBt0pQc</content><link rel='replies' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/5601856068617646891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rizwanlone.blogspot.com/2017/07/android-hacking.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/5601856068617646891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/5601856068617646891'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/2017/07/android-hacking.html' title='Android hacking'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1411082144549364087.post-3653217393561562999</id><published>2015-10-11T00:43:00.001+05:30</published><updated>2015-10-11T00:45:17.285+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="hack"/><category scheme="http://www.blogger.com/atom/ns#" term="hack facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="hack line"/><category scheme="http://www.blogger.com/atom/ns#" term="hack mcent"/><category scheme="http://www.blogger.com/atom/ns#" term="hack whatsapp"/><category scheme="http://www.blogger.com/atom/ns#" term="hake hike"/><category scheme="http://www.blogger.com/atom/ns#" term="hake wechat"/><category scheme="http://www.blogger.com/atom/ns#" term="MAC"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac Spoofing"/><category scheme="http://www.blogger.com/atom/ns#" term="Spoofing"/><title type='text'>How to Access Someone Else&#39;s WhatsApp/Hike/Line/Wechat Account</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h1 class=&quot;firstHeading&quot; itemprop=&quot;name&quot; style=&quot;-webkit-font-smoothing: antialiased; font-family: Helvetica, arial, sans-serif; font-size: 35px; margin: 0px; padding: 0px; text-align: center;&quot;&gt;
&lt;span style=&quot;color: #38761d;&quot;&gt;How to Access Someone Else&#39;s WhatsApp/Hike/Line/Wechat Account&lt;/span&gt;&lt;/h1&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;color: #38761d;&quot;&gt;*****************************************************************************************************************************************************************************************************************&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://www.whatsapp.com/img/fb-post.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;312&quot; src=&quot;https://www.whatsapp.com/img/fb-post.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;line-height: 29px; text-align: left;&quot;&gt;&lt;span style=&quot;color: red; font-family: Helvetica, arial, sans-serif;&quot;&gt;&lt;b&gt;Requirement&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: red; font-family: Helvetica, arial, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: #f6f5f4; line-height: 29px;&quot;&gt;&lt;b&gt;: Rooted android Device,&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style=&quot;color: red; font-family: Helvetica, arial, sans-serif; line-height: 29px;&quot;&gt;BusyBox,&lt;/b&gt;&lt;b style=&quot;color: red; font-family: Helvetica, arial, sans-serif; line-height: 29px;&quot;&gt;Terminal Emulator&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: #f6f5f4; color: red; font-family: Helvetica, arial, sans-serif; font-size: 20px; font-weight: bold; line-height: 29px;&quot;&gt;&amp;nbsp;MAC Spoofing&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div class=&quot;step_num&quot; style=&quot;color: #545454; float: left; font-family: Helvetica, arial, sans-serif; font-size: 43px; font-weight: bold; line-height: 25px; margin: 0px; padding: 8px 15px 3px 0px;&quot;&gt;
1&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;font-family: Helvetica, arial, sans-serif; font-size: 16px; line-height: 25px; margin: 0px; padding: 0px;&quot;&gt;
&lt;b class=&quot;whb&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;Uninstall WhatsApp from your phone or device&lt;span style=&quot;color: lime;&quot;&gt;.&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #545454;&quot;&gt;&amp;nbsp;You&#39;ll install it again at the end of the method, but you&#39;ll need to configure it differently, and the easiest way to make sure you&#39;ll be able to do that correctly is to completely uninstall it now.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;color: #545454; font-family: Helvetica, arial, sans-serif; font-size: 16px; line-height: 25px; margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;step_num&quot; style=&quot;color: #545454; float: left; font-family: Helvetica, arial, sans-serif; font-size: 43px; font-weight: bold; line-height: 25px; margin: 0px; padding: 8px 15px 3px 0px;&quot;&gt;
2&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;color: #545454; font-family: Helvetica, arial, sans-serif; font-size: 16px; line-height: 25px; margin: 0px; padding: 0px;&quot;&gt;
&lt;b class=&quot;whb&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;Obtain your target&#39;s phone.&lt;/b&gt;&amp;nbsp;You&#39;ll need it for two different steps throughout the process, but this shouldn&#39;t take too long - you should be able to return it before your target starts to miss it.&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;color: #545454; font-family: Helvetica, arial, sans-serif; font-size: 16px; line-height: 25px; margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;color: #545454; font-family: Helvetica, arial, sans-serif; font-size: 16px; line-height: 25px; margin: 0px; padding: 0px;&quot;&gt;
&lt;div class=&quot;step_num&quot; style=&quot;float: left; font-size: 43px; font-weight: bold; margin: 0px; padding: 8px 15px 3px 0px;&quot;&gt;
3&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;b class=&quot;whb&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;Find your target&#39;s phone&#39;s Media Access Control (MAC) address.&lt;/b&gt;&amp;nbsp;A MAC address is a unique identifier assigned to your phone or other device that essentially serves as its online identity. Find and write down your target&#39;s MAC address. It takes the form of six pairs of letters or numbers, separated by colons (01:23:45:67:89:ab).&lt;br /&gt;
&lt;ul style=&quot;margin: 0px; padding: 5px 5px 20px 55px;&quot;&gt;
&lt;li style=&quot;-webkit-font-smoothing: antialiased; background-color: white; border-radius: 4px; border: none; clear: both; list-style: disc; margin: 0px; padding: 0px; position: relative;&quot;&gt;On an Android, find this in Settings → About phone → Status → Wi-Fi MAC address.&lt;/li&gt;
&lt;li style=&quot;-webkit-font-smoothing: antialiased; background-color: white; border-radius: 4px; border: none; clear: both; list-style: disc; margin: 0px; padding: 0px; position: relative;&quot;&gt;On an iPhone, go to Settings → General → About → Wi-Fi Address.&lt;/li&gt;
&lt;li style=&quot;-webkit-font-smoothing: antialiased; background-color: white; border-radius: 4px; border: none; clear: both; list-style: disc; margin: 0px; padding: 0px; position: relative;&quot;&gt;On a Windows phone, look in Settings → About → More info → MAC address.&lt;/li&gt;
&lt;li style=&quot;-webkit-font-smoothing: antialiased; background-color: white; border-radius: 4px; border: none; clear: both; list-style: disc; margin: 0px; padding: 0px; position: relative;&quot;&gt;On a BlackBerry, go to Options → Device → Device and Status info → WLAN MAC.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div class=&quot;step_num&quot; style=&quot;float: left; font-size: 43px; font-weight: bold; margin: 0px; padding: 8px 15px 3px 0px;&quot;&gt;
4&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;b class=&quot;whb&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;Find your MAC address using the instructions above.&lt;/b&gt;&amp;nbsp;Make sure to save it somewhere secure, as you&#39;ll want to change your device back to that address once you&#39;re done.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;div class=&quot;step_num&quot; style=&quot;float: left; font-size: 43px; font-weight: bold; margin: 0px; padding: 8px 15px 3px 0px;&quot;&gt;
5&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;b class=&quot;whb&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;Change (&quot;spoof&quot;) your phone&#39;s MAC address to that of your target.&lt;/b&gt;&amp;nbsp;This will allow your phone to pass as your target&#39;s, letting you convince WhatsApp that you are your target when you log in.&lt;br /&gt;
&lt;ul style=&quot;margin: 0px; padding: 5px 5px 20px 55px;&quot;&gt;
&lt;li style=&quot;-webkit-font-smoothing: antialiased; background-color: white; border-radius: 4px; border: none; clear: both; list-style: disc; margin: 0px; padding: 0px; position: relative;&quot;&gt;On an iPhone or other device, install a MAC spoofing app like MacDaddy X or WifiSpoof. Use that to change your MAC address.&lt;/li&gt;
&lt;li style=&quot;-webkit-font-smoothing: antialiased; background-color: white; border-radius: 4px; border: none; clear: both; list-style: disc; margin: 0px; padding: 0px; position: relative;&quot;&gt;On Android, install BusyBox and the Terminal Emulator (apps available for free on Google Play). In the terminal, type &quot;ip link show&quot; to see a list of interfaces. Identify the one that has your MAC address -- for this example, we&#39;ll use the wlan0 interface. In the terminal emulator, enter &quot;ip link set wlan0 address XX:XX:XX:XX:XX:XX&quot; and &quot;ip link set wlan0 broadcast XX:XX:XX:XX:XX:XX&quot;, where wlan0 is the interface you identified and XX:XX:XX:XX:XX:XX is your target&#39;s MAC address. To check that you&#39;ve successfully changed your MAC address, enter &quot;ip link show wlan0.&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div class=&quot;step_num&quot; style=&quot;float: left; font-size: 43px; font-weight: bold; margin: 0px; padding: 8px 15px 3px 0px;&quot;&gt;
6&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;b class=&quot;whb&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;Install and configure WhatsApp on your phone.&lt;/b&gt;&amp;nbsp;Enter your target&#39;s phone number to set up WhatsApp rather than your own. This will allow you to receive their messages and send messages from their account.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;div class=&quot;step_num&quot; style=&quot;float: left; font-size: 43px; font-weight: bold; margin: 0px; padding: 8px 15px 3px 0px;&quot;&gt;
7&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;b class=&quot;whb&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;Get the confirmation code from your target&#39;s phone&lt;/b&gt;&amp;nbsp;This code will be sent to their phone number as part of the WhatsApp configuration process. Access their phone one last time to get that verification code.Enter it into WhatsApp on your phone when prompted, and you&#39;re all ready to go. Accessing the phone is not important because it will automatically give access to their WhatsApp accounts, when we enter the yarget&#39;s phone number to set up WhatsApp. But in certain cases its important to access the phone.&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;Note:- If you don&#39;t want your target to find out about your spoofing, make sure to delete the confirmation code from their phone before they can see it.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div class=&quot;step_num&quot; style=&quot;float: left; font-size: 43px; font-weight: bold; margin: 0px; padding: 8px 15px 3px 0px;&quot;&gt;
8&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;b class=&quot;whb&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;When you no longer need to access your target&#39;s WhatsApp account, change your MAC address back to what it was.&lt;/b&gt;&amp;nbsp;Repeat the instructions to change it, but this time change it to your original address rather than your target&#39;s. This will restore your phone to how it was originally, which will ensure that there are no future problems with Internet usage or connectivity.&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
Note:-You can also use this trick for transferring mcent money to your account.&lt;/div&gt;
&lt;div class=&quot;step&quot; style=&quot;margin: 0px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: #f6f5f4; color: red; font-family: Helvetica, arial, sans-serif; font-size: 20px; font-weight: bold; line-height: 29px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/3653217393561562999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rizwanlone.blogspot.com/2015/10/how-to-access-someone-elses.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/3653217393561562999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/3653217393561562999'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/2015/10/how-to-access-someone-elses.html' title='How to Access Someone Else&#39;s WhatsApp/Hike/Line/Wechat Account'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Srinagar</georss:featurename><georss:point>34.0836581 74.797368099999971</georss:point><georss:box>33.8733006 74.474644599999976 34.2940156 75.120091599999967</georss:box></entry><entry><id>tag:blogger.com,1999:blog-1411082144549364087.post-1479758267104210745</id><published>2015-10-10T20:43:00.001+05:30</published><updated>2015-10-10T20:43:49.109+05:30</updated><title type='text'>HTML5 Mobile App Development Using Intel XDK</title><content type='html'>&lt;p dir=&quot;ltr&quot;&gt;Cross-platform mobile application development is a technique of writing single codebase for apps that will be in the end installed and used in different mobile operating systems. Applications built using this technique are called as cross-platform mobile apps. Cross-platform mobile apps that are written in HTML, CSS and JavaScript are called as hybrid apps.&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;In this article we will learn how to create hybrid apps using Intel XDK and design hybrid apps using Ionic design components. In this chapter we will specifically cover what is Intel XDK, why you should use Intel XDK, how does Intel XDK work and its limitations.&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;What Do You Need to &lt;u&gt;Know&lt;/u&gt;?&lt;br&gt;
Before you start learning to create hybrid apps using Intel XDK and Ionic you need to know basics of how to create websites that is you should know basics of HTML, CSS, JavaScript and any backend technology. Mostly web developers are the ones who prefer to create hybrid apps, as they don&amp;#8217;t have to learn new programming languages and frameworks for creating mobile apps.&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;Native, Hybrid and Web apps&lt;br&gt;
You will often hear the terms native app, hybrid app and web app. Often developers get confused between these terms therefore it&amp;#8217;s important to clearly understand the meaning of each of these terms.&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;Native Apps: Native apps live on the device and are opened through icons on the device home screen. They are developed to work specifically on one operating system. They are installed through platform specific stores. They can take advantage of all device features and can work offline.&lt;br&gt;
Web Apps: Web apps are websites that are designed to look and behave like native apps &amp;#8211; for example: they can hide browser&amp;#8217;s UI components, scale according to the screen width etc. Users can also add them to the home screen. HTML5 features make it behave more like a native app &amp;#8211; for example: HTML5 application cache makes it possible to access a web app without Internet connection. Web apps don&amp;#8217;t have access to all native device features such as toggling flashlight, detecting app state changes, push notifications and so on.&lt;br&gt;
Hybrid Apps: Hybrid apps are the ones that combine the best and worst elements of both native and web apps. They are written in HTML, CSS and JavaScript just like web apps so that they can be used in any platform and are wrapped inside a native app so that it can access all device features, work offline and can be installed through platform specific stores. But just like web apps they have slow performance because they are interpreted inside a native app. They also lack native look and feel just like web apps.&lt;br&gt;
Each of these app types has their own advantages and disadvantages. It may sometimes seem difficult to choose between them but its not that hard to choose.&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;So when it comes to choosing one of these kinds of apps in the end all depends on the features of the app, graphics, and how you want to distribute the app. Even budget and time are important factors.&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;You should go with native app development if you are planning to create games or any other kind of app that includes high graphics and animations. Native apps are compiled therefore they are best for these kinds of apps. Although WebGL can be used by hybrid or web apps to create games but still performance wise WebGL will always be behind native code because JavaScript is interpreted and also WebGL is not supported by all mobile browsers. If you want to build cross platform mobile games and you don&amp;#8217;t to use hybrid apps than in this case you go for game development engines like Unity 3D which let&amp;#8217;s you build games for multiple platforms with single code base and also let&amp;#8217;s you write game scripts using major languages such as C#, JavaScript and Python.&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;You should consider creating a web app if your app doesn&amp;#8217;t depend on native a feature that is it only relays on browser APIs. For example: If you have a responsive or adaptive designed website and you want users to be able to use it as a app then you can go with web app. Converting a mobile des&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt; &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy2yhHavFRdfAgGN7lMvTCrlvxwMbw-_IZv9gtlpzQIQvVBsxur1-kcmjj-s_26EjghQII0PaWDA0tpQ5scqcpF0pPBWa1M-n-uux5jlUie4k-XI8kn1fDGZW5ujMXOCvfHubn0Ov2a3p5/s1600/intel-sdk.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt; &lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy2yhHavFRdfAgGN7lMvTCrlvxwMbw-_IZv9gtlpzQIQvVBsxur1-kcmjj-s_26EjghQII0PaWDA0tpQ5scqcpF0pPBWa1M-n-uux5jlUie4k-XI8kn1fDGZW5ujMXOCvfHubn0Ov2a3p5/s640/intel-sdk.jpg&quot;&gt; &lt;/a&gt; &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/1479758267104210745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rizwanlone.blogspot.com/2015/10/html5-mobile-app-development-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/1479758267104210745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/1479758267104210745'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/2015/10/html5-mobile-app-development-using.html' title='HTML5 Mobile App Development Using Intel XDK'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy2yhHavFRdfAgGN7lMvTCrlvxwMbw-_IZv9gtlpzQIQvVBsxur1-kcmjj-s_26EjghQII0PaWDA0tpQ5scqcpF0pPBWa1M-n-uux5jlUie4k-XI8kn1fDGZW5ujMXOCvfHubn0Ov2a3p5/s72-c/intel-sdk.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1411082144549364087.post-271303975691535800</id><published>2013-11-21T10:17:00.001+05:30</published><updated>2013-11-21T10:17:07.416+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><title type='text'>C++ -&gt; C#: What You Need to Know to Move from C++ to C#</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table bgcolor=&quot;#ffffff&quot; border=&quot;0&quot; style=&quot;border-spacing: 0px; border: 0px; color: #333333; font-family: &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 13px; height: 100%px; line-height: 16px; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;&lt;tbody style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;
&lt;tr style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;&lt;td bgcolor=&quot;#ffffff&quot; style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;&lt;span class=&quot;clsSumText&quot; style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;C# builds on the syntax and semantics of C++, allowing C programmers to take advantage of .NET and the common language runtime. While the transition from C++ to C# should be a smooth one, there are a few things to watch out for including changes to new, structs, constructors, and destructors. This article explores the language features that are new to C# such as garbage collection, properties, foreach loops, and interfaces. Following a discussion of interfaces, there&#39;s a discussion of properties, arrays, and the base class libraries. The article concludes with an exploration of asynchronous I/O, attributes and reflection, type discovery, and dynamic invocation.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;&lt;td style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;&lt;img align=&quot;left&quot; alt=&quot;E&quot; height=&quot;63&quot; hspace=&quot;5&quot; src=&quot;http://i.msdn.microsoft.com/Cc301520.e(en-us,MSDN.10).gif&quot; style=&quot;border: none; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot; width=&quot;44&quot; /&gt;very 10 years or so, developers must devote time and energy to learning a new set of programming skills. In the early 1980s it was Unix and C; in the early 1990s it was Windows® and C++; and today it is the Microsoft® .NET Framework and C#. While this process takes work, the benefits far outweigh the costs. The good news is that with C# and .NET the analysis and design phases of most projects are virtually unchanged from what they were with C++ and Windows. That said, there are significant differences in how you will approach programming in the new environment. In this article I&#39;ll provide information about how to make the leap from programming in C++ to programming in C#.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Many articles (for example,&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb984953.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl03&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;http://msdn.microsoft.com/msdnmag/issues/0900/csharp/csharp.asp&lt;/a&gt;) have explained the overall improvements that C# implements, and I won&#39;t repeat that information here. Instead, I&#39;ll focus on what I see as the most significant change when moving from C++ to C#: going from an unmanaged to a managed environment. I&#39;ll also warn you about a few significant traps awaiting the unwary C++ programmer and I&#39;ll show some of the new features of the language that will affect how you implement your programs.&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Moving to a Managed Environment&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C++ was designed to be a low-level platform-neutral object-oriented programming language. C# was designed to be a somewhat higher-level component-oriented language. The move to a managed environment represents a sea change in the way you think about programming. C# is about letting go of precise control, and letting the framework help you focus on the big picture.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For example, in C++ you have tremendous control over the creation and even the layout of your objects. You can create an object on the stack, on the heap, or even in a particular place in memory using the placement operator new.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;With the managed environment of .NET, you give up that level of control. When you choose the type of your object, the choice of where the object will be created is implicit. Simple types (ints, doubles, and longs) are always created on the stack (unless they are contained within other objects), and classes are always created on the heap. You cannot control where on the heap an object is created, you can&#39;t get its address, and you can&#39;t pin it down in a particular memory location. (There are ways around these restrictions, but they take you out of the mainstream.)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You no longer truly control the lifetime of your object. C# has no destructor. The garbage collector will take your item&#39;s storage back sometime after there are no longer any references to it, but finalization is nondeterministic.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The very structure of C# reflects the underlying framework. There is no multiple inheritance and there are no templates because multiple inheritance is terribly difficult to implement efficiently in a managed, garbage-collected environment, and because generics have not been implemented in the framework.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The C# simple types are nothing more than a mapping to the underlying common language runtime (CLR) types. For example, a C# int maps to a System.Int32. The types in C# are determined not by the language, but by the common type system. In fact, if you want to preserve the ability to derive C# objects from Visual Basic® objects, you must restrict yourself further, to the common language subset—those features shared by all .NET languages.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On the other hand, the managed environment and CLR bring a number of tangible benefits. In addition to garbage collection and a uniform type system across all .NET languages, you get a greatly enhanced component-based language, which fully supports versioning and provides extensible metadata, available at runtime through reflection. There is no need for special support for late binding; type discovery and late binding are built into the language. In C#, enums and properties are first-class members of the language, fully supported by the underlying engine, as are events and delegates (type-safe function pointers).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The key benefit of the managed environment, however, is the .NET Framework. While the framework is available to any .NET language, C# is a language that&#39;s well-designed for programming with the framework&#39;s rich set of classes, interfaces, and objects.&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Traps&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C# looks a lot like C++, and while this makes the transition easy, there are some traps along the way. If you write what looks like perfectly legitimate code in C++, it won&#39;t compile, or worse, it won&#39;t behave as expected. Most of the syntactic changes from C++ to C# are trivial (no semicolon after a class declaration, Main is now capitalized). I&#39;m building a Web page which lists these for easy reference (see&lt;a href=&quot;http://www.libertyassociates.com/&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl04&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;http://www.LibertyAssociates.com&lt;/a&gt;&amp;nbsp;and click on the FAQ for Programming C#), but most of these are easily caught by the compiler and I won&#39;t devote space to them here. I do want to point out a few significant changes that will cause problems, however.&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Reference and Value Types&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C# distinguishes between value types and reference types. Simple types (int, long, double, and so on) and structs are value types, while all classes are reference types, as are Objects. Value types hold their value on the stack, like variables in C++, unless they are embedded within a reference type. Reference type variables sit on the stack, but they hold the address of an object on the heap, much like pointers in C++. Value types are passed to methods by value (a copy is made), while reference types are effectively passed by reference.&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Structs&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Structs are significantly different in C#. In C++ a struct is exactly like a class, except that the default inheritance and default access are public rather than private. In C# structs are very different from classes. Structs in C# are designed to encapsulate lightweight objects. They are value types (not reference types), so they&#39;re passed by value. In addition, they have limitations that do not apply to classes. For example, they are sealed, which means they cannot be derived from or have any base class other than System.ValueType, which is derived from Object. Structs cannot declare a default (parameterless) constructor.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;On the other hand, structs are more efficient than classes so they&#39;re perfect for the creation of lightweight objects. If you don&#39;t mind that the struct is sealed and you don&#39;t mind value semantics, using a struct may be preferable to using a class, especially for very small objects.&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Everything Derives from Object&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In C# everything ultimately derives from Object. This includes classes you create, as well as value types such as int or structs. The Object class offers useful methods, such as ToString. An example of when you use ToString is with the System.Console.WriteLine method, which is the C# equivalent of cout. The method is overloaded to take a string and an array of objects.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;To use WriteLine you provide substitution parameters, not unlike the old-fashioned printf. Assume for a moment that myEmployee is an instance of a user-defined Employee class and myCounter is an instance of a user-defined Counter class. If you write the following code&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Console.WriteLine(&quot;The employee: {0}, the counter value: {1}&quot;, 
                  myEmployee, myCounter);
&lt;/code&gt;&lt;/pre&gt;
WriteLine will call the virtual method Object.ToString on each of the objects, substituting the strings they return for the parameters. If the Employee class does not override ToString, the default implementation (derived from System.Object) will be called, which will return the name of the class as a string. Counter might override ToString to return an integer value. If so, the output might be:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;The employee: Employee, the counter value: 12
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;What happens if you pass integer values to WriteLine? You can&#39;t call ToString on an integer, but the compiler will implicitly box the int in an instance of Object whose value will be set to the value of the integer. When WriteLine calls ToString, the object will return the string representation of the integer&#39;s value (see&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl05&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;1&lt;/a&gt;).&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Reference Parameters and Out Parameters&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In C#, as in C++, a method can only have one return value. You overcome this in C++ by passing pointers or references as parameters. The called method changes the parameters, and the new values are available to the calling method.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;When you pass a reference into a method, you do have access to the original object in exactly the way that passing a reference or pointer provides you access in C++. With value types, however, this does not work. If you want to pass the value type by reference, you mark the value type parameter with the ref keyword.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public void GetStats(ref int age, ref int ID, ref int yearsServed)
&lt;/code&gt;&lt;/pre&gt;
Note that you need to use the ref keyword in both the method declaration and the actual call to the method.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Fred.GetStats(ref age, ref ID, ref yearsServed);
&lt;/code&gt;&lt;/pre&gt;
You can now declare age, ID, and yearsServed in the calling method and pass them into GetStats and get back the changed values.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C# requires definite assignment, which means that the local variables, age, ID, and yearsServed must be initialized before you call GetStats. This is unnecessarily cumbersome; you&#39;re just using them to get values out of GetStats. To address this problem, C# also provides the out keyword, which indicates that you may pass in uninitialized variables and they will be passed by reference. This is a way of stating your intentions explicitly:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public void GetStats(out int age, out int ID, out int yearsServed)
&lt;/code&gt;&lt;/pre&gt;
Again, the calling method must match.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Fred.GetStats(out age,out ID, out yearsServed);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Calling New&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In C++, the new keyword instantiates an object on the heap. Not so in C#. With reference types, the new keyword does instantiate objects on the heap, but with value types such as structs, the object is created on the stack and a constructor is called.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can, in fact, create a struct on the stack without using new, but be careful! New initializes the object. If you don&#39;t use new, you must initialize all the values in the struct by hand before you use it (before you pass it to a method) or it won&#39;t compile. Once again, definite assignment requires that every object be initialized (see&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl06&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;2&lt;/a&gt;).&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Properties&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Most C++ programmers try to keep member variables private. This data hiding promotes encapsulation and allows you to change your implementation of the class without breaking the interface your clients rely on. You typically want to allow the client to get and possibly set the value of these members, however, so C++ programmers create accessor methods whose job is to modify the value of the private member variables.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In C#, properties are first-class members of classes. To the client, a property looks like a member variable, but to the implementor of the class it looks like a method. This arrangement is perfect; it allows you total encapsulation and data hiding while giving your clients easy access to the members.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can provide your Employee class with an Age property to allow clients to get and set the employee&#39;s age member.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public int Age
{
    get
    {
        return age;
    }
    set
    {
        age = value;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The keyword value is implicitly available to the property. If you write&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Fred.Age = 17;
&lt;/code&gt;&lt;/pre&gt;
the compiler will pass in the value 17 as value.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can create a read-only property for YearsServed by implementing the Get and not the Set accessor.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public int YearsServed
{
    get
    {
        return yearsServed;
    }
}
&lt;/code&gt;&lt;/pre&gt;
If you change your driver program to use these accessors, you can see how they work (see&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl07&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;3&lt;/a&gt;).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can get Fred&#39;s age through the property and then you can use that property to set the age. You can access the YearsServed property to obtain the value, but not to set it; if you uncomment the last line, the program will not compile.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If you decide later to retrieve the Employee&#39;s age from a database, you need change only the accessor implementation; the client will not be affected.&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Arrays&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C# provides an array class which is a smarter version of the traditional C/C++ array. For example, it is not possible to write past the bounds of a C# array. In addition, Array has an even smarter cousin, ArrayList, which can grow dynamically to manage the changing size requirements of your program.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Arrays in C# come in three flavors: single-dimensional, multidimensional rectangular arrays (like the C++ multidimensional arrays), and jagged arrays (arrays of arrays).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can create a single-dimensional array like this:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;int[] myIntArray = new int[5];
&lt;/code&gt;&lt;/pre&gt;
Otherwise, you can initialize it like this:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;int[] myIntArray = { 2, 4, 6, 8, 10 };
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can create a 4×3 rectangular array like this:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;int[,] myRectangularArray = new int[rows, columns];
&lt;/code&gt;&lt;/pre&gt;
Alternatively, you can simply initialize it, like this:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;int[,] myRectangularArray =  
{
    {0,1,2}, {3,4,5}, {6,7,8}, {9,10,11}
};
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Since jagged arrays are arrays of arrays, you supply only one dimension&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;int[][] myJaggedArray = new int[4][];
&lt;/code&gt;&lt;/pre&gt;
and then create each of the internal arrays, like so:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;myJaggedArray[0] = new int[5]; 
myJaggedArray[1] = new int[2]; 
myJaggedArray[2] = new int[3]; 
myJaggedArray[3] = new int[5]; 
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Because arrays derive from the System.Array object, they come with a number of useful methods, including Sort and Reverse.&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Indexers&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;It is possible to create your own array-like objects. For example, you might create a listbox which has a set of strings that it will display. It would be convenient to be able to access the contents of the box with an index, just as if it were an array.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;string theFirstString = myListBox[0];
string theLastString = myListBox[Length-1];
&lt;/code&gt;&lt;/pre&gt;
This is accomplished with Indexers. An Indexer is much like a property, but supports the syntax of the index operator.&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl08&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;4&lt;/a&gt;&amp;nbsp;shows a property whose name is followed by the index operator.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl09&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;5&lt;/a&gt;&amp;nbsp;shows how to implement a very simple ListBox class and provide indexing for it.&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Interfaces&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A software interface is a contract for how two types will interact. When a type publishes an interface, it tells any potential client, &quot;I guarantee I&#39;ll support the following methods, properties, events, and indexers.&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;C# is an object-oriented language, so these contracts are encapsulated in entities called interfaces. The interface keyword declares a reference type which encapsulates a contract.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Conceptually, an interface is similar to an abstract class. The difference is that an abstract class serves as the base class for a family of derived classes, while interfaces are meant to be mixed in with other inheritance trees.&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
The IEnumerable Interface&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Returning to the previous example, it would be nice to be able to print the strings from the ListBoxTest class using a foreach loop, as you can with a normal array. You can accomplish this by implementing the IEnumerable interface in your class, which is used implicitly by the foreach construct. IEnumerable is implemented in any class that wants to support enumeration and foreach loops.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IEnumerable has only one method, GetEnumerator, whose job is to return a specialized implementation of IEnumerator. Thus the semantics of an Enumerable class allow it to provide an Enumerator.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The Enumerator must implement the IEnumerator methods. This can be implemented either directly by the container class or by a separate class. The latter approach is generally preferred because it encapsulates this responsibility in the Enumerator class rather than cluttering up the container.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I&#39;ll add an Enumerator to the ListBoxTest that you have already seen in&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl10&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;5&lt;/a&gt;. Because the Enumerator class is specific to my container class (that is, because ListBoxEnumerator must know a lot about ListBoxTest) I will make it a private implementation, contained within ListBoxTest.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In this version, ListBoxTest is defined to implement the IEnumerable interface. The IEnumerable interface must return an Enumerator.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public IEnumerator GetEnumerator()
{
    return (IEnumerator) new ListBoxEnumerator(this);
}
&lt;/code&gt;&lt;/pre&gt;
Notice that the method passes the current ListBoxTest object (this) to the enumerator. That will allow the enumerator to enumerate this particular ListBoxTest object.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The class to implement the Enumerator is implemented here as ListBoxEnumerator, which is a private class defined within ListBoxTest. Its work is fairly straightforward.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The ListBoxTest to be enumerated is passed in as an argument to the constructor, where it is assigned to the member variable myLBT. The constructor also sets the member variable index to -1, indicating that enumerating the object has not yet begun.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public ListBoxEnumerator(ListBoxTest theLB)
{
    myLBT = theLB;
    index = -1;
}
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The MoveNext method increments the index and then checks to ensure that you have not run past the end of the object you&#39;re enumerating. If you have, you return false; otherwise, true is returned.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public bool MoveNext()
{
    index++;
    if (index &amp;gt;= myLBT.myStrings.Length)
        return false;
    else
        return true;
}
&lt;/code&gt;&lt;/pre&gt;
Reset does nothing but reset the index to -1.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The property Current is implemented to return the last string added. This is an arbitrary decision; in other classes Current will have whatever meaning the designer decides is appropriate. However it&#39;s defined, every enumerator must be able to return the current member, as accessing the current member is what enumerators are for.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public object Current
{
    get
    {
        return(myLBT[index]);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;That&#39;s all there is to it. The call to foreach fetches the enumerator and uses it to enumerate over the array. Since foreach will display every string whether or not you&#39;ve added a meaningful value, I&#39;ve changed the initialization of myStrings to eight items to keep the display manageable.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;myStrings = new String[8]; 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Using the Base Class Libraries&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;To get a better sense of how C# differs from C++ and how your approach to solving problems might change, let&#39;s examine a slightly less trivial example. I&#39;ll build a class to read a large text file and display its contents on the screen. I&#39;d like to make this a multithreaded program so that while the data is being read from the disk, I can do other work.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In C++ you would create a thread to read the file, and another thread to do the other work. These threads would work independently, but they might need synchronization. You can do all of that in C# as well, but most of the time you won&#39;t need to write your own threading because .NET provides very powerful mechanisms for asynchronous I/O.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The asynchronous I/O support is built into the CLR and is nearly as easy to use as the normal I/O stream classes. You start by informing the compiler that you&#39;ll be using objects from a number of System namespaces:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;using System;
using System.IO;
using System.Text;
&lt;/code&gt;&lt;/pre&gt;
When you include System, you do not automatically include all its subsidiary namespaces, each must be explicitly included with the using keyword. Since you&#39;ll be using the I/O stream classes, you&#39;ll need System.IO, and you want System.Text to support ASCII encoding of your byte stream, as you&#39;ll see shortly.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The steps involved in writing this program are surprisingly simple because .NET will do most of the work for you. I&#39;ll use the BeginRead method of the Stream class. This method provides asynchronous I/O, reading in a buffer full of data, and then calling your callback method when the buffer is ready for you to process.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You need to pass in a byte array as the buffer and a delegate for the callback method. You&#39;ll declare both of these as private member variables of your driver class.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public class AsynchIOTester
{
    private Stream inputStream;       
    private byte[] buffer;          
    private AsyncCallback myCallBack;
&lt;/code&gt;&lt;/pre&gt;
The member variable inputStream is of type Stream, and it is on this object that you will call the BeginRead method, passing in the buffer as well as the delegate (myCallBack). A delegate is very much like a type-safe pointer to member function. In C#, delegates are first-class elements of the language.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.NET will call your delegated method when the byte has been filled from the file on disk so that you can process the data. While you&#39;re waiting you can do other work (in this case, incrementing an integer from 1 to 50,000, but in a production program you might be interacting with the user or doing other useful tasks).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The delegate in this case is declared to be of type AsyncCallback, which is what the BeginRead method of Stream expects. An AsyncCallback delegate is declared in the System namespace as follows:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public delegate void AsyncCallback (IAsyncResult ar);
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Thus, this delegate may be associated with any method that returns void and takes an IAsyncResult interface as a parameter. The CLR will pass in the IAsyncResult interface object at runtime when the method is called; you only have to declare the method&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;void OnCompletedRead(IAsyncResult asyncResult)
&lt;/code&gt;&lt;/pre&gt;
and then to hook up the delegate in the constructor:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;AsynchIOTester()
{
      •••
     myCallBack = new AsyncCallback(this.OnCompletedRead);
}
&lt;/code&gt;&lt;/pre&gt;
This assigns to the member variable myCallback (which was previously defined to be of type AsyncCallback) the instance of the delegate created by calling the AsyncCallback constructor and passing in the method you want to associate with the delegate.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Here&#39;s how the entire program works, step by step. In Main you create an instance of the class and tell it to run:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public static void Main()
{
    AsynchIOTester theApp = new AsynchIOTester();    
    theApp.Run();
}
&lt;/code&gt;&lt;/pre&gt;
The call to new fires up the constructor. In the constructor you open a file and get a Stream object back. You then allocate space in the buffer and hook up the callback mechanism.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;AsynchIOTester()
{
    inputStream = File.OpenRead(@&quot;C:\MSDN\fromCppToCS.txt&quot;);
    buffer = new byte[BUFFER_SIZE];
    myCallBack = new AsyncCallback(this.OnCompletedRead);
}
&lt;/code&gt;&lt;/pre&gt;
In the Run method, you call BeginRead, which will cause an asynchronous read of the file.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;inputStream.BeginRead(
     buffer,             // where to put the results
     0,                  // offset
     buffer.Length,      // how many bytes (BUFFER_SIZE)
     myCallBack,         // call back delegate
     null);              // local state object
&lt;/code&gt;&lt;/pre&gt;
You then go on to do other work.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;for (long i = 0; i &amp;lt; 50000; i++)        
{
    if (i%1000 == 0)
    {
        Console.WriteLine(&quot;i: {0}&quot;, i);
    }
}
&lt;/code&gt;&lt;/pre&gt;
When the read completes, the CLR will call the callback method.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;void OnCompletedRead(IAsyncResult asyncResult)
{
&lt;/code&gt;&lt;/pre&gt;
The first thing you do in OnCompletedRead is find out how many bytes were read by calling the EndRead method of the Stream object, passing in the IAsyncResult interface object passed in by the common language runtime.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;int bytesRead = inputStream.EndRead(asyncResult);
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The result of this call to EndRead is to get back the number of bytes read. If the number is greater than zero, convert the buffer into a string and write it to the console, then call BeginRead again for another asynchronous read.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;if (bytesRead &amp;gt; 0)
{
    String s = Encoding.ASCII.GetString(buffer, 0, bytesRead);
    Console.WriteLine(s);
    inputStream.BeginRead(buffer, 0, buffer.Length,
                          myCallBack, null);
}
&lt;/code&gt;&lt;/pre&gt;
Now you can do other work (in this case, counting to 50,000) while the reads are taking place, but you can handle the read data (in this case, by outputting it to the console) each time a buffer is full. The complete source code for this example, AsynchIO.cs, is available for download from the link at the top of this article.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Management of the asynchronous I/O is provided entirely by the CLR. It gets even nicer when you read over the network.&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Reading a File Across the Network&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;In C++, reading a file across the network is a nontrivial programming exercise. .NET provides extensive support for this. In fact, reading files across the network is just another use of the standard Base Class Library Stream classes.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Start by creating an instance of the TCPListener class, to listen to a TCP/IP port (port 65000 in this case).&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;TCPListener tcpListener = new TCPListener(65000);
&lt;/code&gt;&lt;/pre&gt;
Once constructed, ask the TCPListener object to start listening.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;tcpListener.Start();  
&lt;/code&gt;&lt;/pre&gt;
Now wait for a client to request a connection.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Socket socketForClient = tcpListener.Accept();
&lt;/code&gt;&lt;/pre&gt;
The Accept method of the TCPListener object returns a Socket object, which represents a standard Berkeley socket interface and which is bound to a specific end point (in this case, the client). Accept is a synchronous method and will not return until it receives a connection request. If the socket is connected, you&#39;re ready to send the file to the client.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;if (socketForClient.Connected)
{
•••
&lt;/code&gt;&lt;/pre&gt;
Next you have to create a NetworkStream class, passing the socket in to the constructor.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;NetworkStream networkStream = new NetworkStream(socketForClient);
&lt;/code&gt;&lt;/pre&gt;
Then create a StreamWriter object much as you did before, except this time not on a file, but on the NetworkStream you just created.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;System.IO.StreamWriter streamWriter = 
 new System.IO.StreamWriter(networkStream);
&lt;/code&gt;&lt;/pre&gt;
When you write to this stream, the stream is sent over the network to the client. The complete source code, TCPServer.cs, is also available for download.&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Creating the Client&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The client instantiates a TCPClient class, which represents a TCP/IP client connection to a host.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;TCPClient socketForServer;
socketForServer = new TCPClient(&quot;localHost&quot;, 65000);
&lt;/code&gt;&lt;/pre&gt;
With this TCPClient, you can create a NetworkStream, and on that stream create a StreamReader.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;NetworkStream networkStream = socketForServer.GetStream();
System.IO.StreamReader streamReader = 
    new System.IO.StreamReader(networkStream);
&lt;/code&gt;&lt;/pre&gt;
Now, read the stream as long as there is data on it, and output the results to the console.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;do
{
    outputString = streamReader.ReadLine();

    if( outputString != null )
    {
        Console.WriteLine(outputString);
    }
}
while( outputString != null );
&lt;/code&gt;&lt;/pre&gt;
To test this, you create a simple test file:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;This is line one
This is line two
This is line three
This is line four
&lt;/code&gt;&lt;/pre&gt;
Here is the output from the server:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Output (Server)
Client connected
Sending This is line one
Sending This is line two
Sending This is line three
Sending This is line four
Disconnecting from client...
Exiting...
&lt;/code&gt;&lt;/pre&gt;
And here is the output from the client:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;This is line one
This is line two
This is line three
This is line four
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Attributes and Metadata&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;One significant difference between C# and C++ is that C# provides inherent support for metadata: data about your classes, objects, methods, and so forth. Attributes come in two flavors: those that are supplied as part of the CLR and attributes you create for your own purposes. CLR attributes are used to support serialization, marshaling, and COM interoperability. A search of the CLR reveals a great many attributes. As you&#39;ve seen, some attributes are applied to an assembly, others to a class or interface. These are called the attribute targets.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Attributes are applied to their target by placing them in square brackets immediately before the target item. Attributes may be combined, either by stacking one on top of another&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile(&quot;.\\keyFile.snk&quot;)]
&lt;/code&gt;&lt;/pre&gt;
or by separating the attributes with commas.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;[assembly: AssemblyDelaySign(false),
   assembly: AssemblyKeyFile(&quot;.\\keyFile.snk&quot;)]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Custom Attributes&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You are free to create your own custom attributes and to use them at runtime as you see fit. For example, you might create a documentation attribute to tag sections of code with the URL of associated documentation. Or you might tag your code with code review comments or bug fix comments.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Suppose your development organization wants to keep track of bug fixes. It turns out you keep a database of all your bugs, but you&#39;d like to tie your bug reports to specific fixes in the code. You might add comments to your code similar to the following:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;// Bug 323 fixed by Jesse Liberty 1/1/2005. 
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;This would make it easy to see in your source code, but it would be nice if you could extract this information into a report or keep it in a database so that you could search for it. It would also be nice if all the bug report notations used the same syntax. A custom attribute may be just what you need. You would then replace your comment with something like this:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;[BugFix(323,&quot;Jesse Liberty&quot;,&quot;1/1/2005&quot;) Comment=&quot;Off by one error&quot;]
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Attributes, like most things in C#, are classes. To create a custom attribute, you derive your new custom attribute class from System.Attribute.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public class BugFixAttribute : System.Attribute
&lt;/code&gt;&lt;/pre&gt;
You need to tell the compiler what kinds of elements this attribute can be used with (the attribute target). You specify this with (what else?) an attribute.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;[AttributeUsage(AttributeTargets.ClassMembers, AllowMultiple = true)]
&lt;/code&gt;&lt;/pre&gt;
AttributeUsage is an attribute applied to attributes—a meta attribute. It provides, if you will, meta-metadata; that is data about the metadata. In this case, you pass two arguments: the first is the target (in this case class members) and a flag indicating whether a given element may receive more than one such attribute. AllowMultiple has been set to true, which means a class member may have more than one BugFixAttribute assigned.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If you wanted to combine Attribute targets, you can OR them together.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;[AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface,
    AllowMultiple = true)]
&lt;/code&gt;&lt;/pre&gt;
This would allow the attribute to be attached to either a Class or an Interface.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The new custom attribute is named BugFixAttribute. The convention is to append the word Attribute to your attribute name. The compiler supports this by allowing you to call the attribute, when you assign it to an element, with the shorter version of the name. Thus, you can write this:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;[BugFix(123, &quot;Jesse Liberty&quot;, &quot;01/01/05&quot;, Comment=&quot;Off by one&quot;)]
&lt;/code&gt;&lt;/pre&gt;
The compiler will first look for an attribute named BugFix and, not finding that, will then look for BugFixAttribute.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Every attribute must have at least one constructor. Attributes take two types of parameters, positional and named. In the previous example, the bug ID, the programmer&#39;s name, and the date were positional parameters and comment was a named parameter. Positional parameters are passed in through the constructor and must be passed in the order declared in the constructor.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public BugFixAttribute(int bugID, string programmer, string date)
{
    this.bugID = bugID;
    this.programmer = programmer;
    this.date = date;
}
&lt;/code&gt;&lt;/pre&gt;
Named parameters are implemented as properties.&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Using the Attribute&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;To test the attribute, create a simple class named MyMath and give it two functions. Then assign the bug fix attributes to the class.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;[BugFixAttribute(121,&quot;Jesse Liberty&quot;,&quot;01/03/05&quot;)]

[BugFixAttribute(107,&quot;Jesse Liberty&quot;,&quot;01/04/05&quot;, 
    Comment=&quot;Fixed off by one errors&quot;)]
public class MyMath
&lt;/code&gt;&lt;/pre&gt;
These attributes will be stored with the metadata.&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl11&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;6&lt;/a&gt;&amp;nbsp;provides the complete source code. The following shows the output:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Calling DoFunc(7). Result: 9.3333333333333339
&lt;/code&gt;&lt;/pre&gt;
As you can see, the attributes had absolutely no impact on the output, and creating attributes has no impact on performance. In fact, for the moment, you have only my word that the attributes exist at all. A quick look at the metadata using ILDASM does reveal that the attributes are in place, however, as shown in&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl12&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;7&lt;/a&gt;.&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Reflection&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For this to be useful, you need a way to access the attributes from the metadata—ideally during runtime. C# provides support for reflection for examining the metadata. Start by initializing an object of type MemberInfo. This object, in the System.Reflection namespace, is provided to discover the attributes of a member and to provide access to the metadata.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;System.Reflection.MemberInfo inf = typeof(MyMath);
&lt;/code&gt;&lt;/pre&gt;
Call the typeof operator on the MyMath type, which returns an object of type Type, which derives from MemberInfo.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The next step is to call GetCustomAttributes on this MemberInfo object, passing in the type of the attribute you want to find. What you get back is an array of objects, each of which is of type BugFixAttribute:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;object[] attributes;
attributes = Attribute.GetCustomAttributes(inf,    
    typeof(BugFixAttribute));
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can now iterate through this array, printing out the properties of the BugFixAttribute object, as shown in&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl13&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;8&lt;/a&gt;. When this replacement code is put into the listing in&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl14&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;6&lt;/a&gt;, the metadata is displayed.&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Type Discovery&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can use reflection to explore and examine the contents of an assembly. You&#39;ll find this particularly useful if you&#39;re building a tool which needs to display information about the assembly, or if you want to dynamically invoke methods in the assembly. You might want to do so if you&#39;re developing a scripting engine, which would allow your users to generate scripts and run them through your program.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;With reflection, you can find the types associated with a module, the methods, fields, properties, and events associated with a type, as well as the signatures of each of the type&#39;s methods, the interfaces supported by the type, and the type&#39;s superclass.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;To start, let&#39;s load an assembly dynamically with the Assembly.Load static method. The signature for this method is as follows:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public static Assembly.Load(AssemblyName)
&lt;/code&gt;&lt;/pre&gt;
Then you should pass in the core library.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Assembly a = Assembly.Load(&quot;Mscorlib.dll&quot;);
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Once the assembly is loaded, you can call GetTypes to return an array of Type objects. The Type object is the heart of reflection. Type represents type declarations: classes, interfaces, arrays, values, and enumerations.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Type[] types = a.GetTypes();
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The assembly returns an array of types that can be displayed in a foreach loop. The output from this will fill many pages. Here is a short excerpt from the output:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Type is System.TypeCode
Type is System.Security.Util.StringExpressionSet
Type is System.Text.UTF7Encoding$Encoder
Type is System.ArgIterator
Type is System.Runtime.Remoting.JITLookupTable
1205 types found
&lt;/code&gt;&lt;/pre&gt;
You have obtained an array filled with the types from the core library, and printed them one by one. As the output shows, the array contains 1,205 entries.&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Reflecting on a Type&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can reflect on a single type in the assembly as well. To do so, you extract a type from the assembly with the GetType method.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;public class Tester
{
    public static void Main()
    {
        // examine a single object
        Type theType = Type.GetType(&quot;System.Reflection.Assembly&quot;);
        Console.WriteLine(&quot;\nSingle Type is {0}\n&quot;, theType);
    }
}    
&lt;/code&gt;&lt;/pre&gt;
The output looks like this:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Single Type is System.Reflection.Assembly
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Finding the Members&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can ask this type for all its members, listing all the methods, properties, and fields, as you can see in&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl15&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;9&lt;/a&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Once again the output is quite lengthy, but within the output you see fields, methods, constructors, and properties, as shown in this excerpt:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;System.String s_localFilePrefix is a Field
Boolean IsDefined(System.Type) is a Method
Void .ctor() is a Constructor
System.String CodeBase  is a Property
System.String CopiedCodeBase  is a Property
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Finding Only Methods&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You might want to focus on only the methods, excluding the fields, properties, and so forth. To do so, you remove the call to GetMembers.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;MemberInfo[] mbrInfoArray = 
    theType.GetMembers(BindingFlags.LookupAll);
&lt;/code&gt;&lt;/pre&gt;
Then you add a call to GetMethods.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;mbrInfoArray = theType.GetMethods();
&lt;/code&gt;&lt;/pre&gt;
The output now is nothing but the methods.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Output (excerpt)
Boolean Equals(System.Object) is a Method
System.String ToString() is a Method
System.String CreateQualifiedName(System.String, System.String)
 is a Method
System.Reflection.MethodInfo get_EntryPoint() is a Method
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Finding Particular Members&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Finally, to narrow down even further, you can use the FindMembers method to find particular members of the type. For example, you can restrict your search to methods whose names begin with the letters &quot;Get&quot;, as you can see in&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl16&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;10&lt;/a&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;An excerpt of the output looks like this:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;System.Type[] GetTypes() is a Method
System.Type[] GetExportedTypes() is a Method
System.Type GetType(System.String, Boolean) is a Method
System.Type GetType(System.String) is a Method
System.Reflection.AssemblyName GetName(Boolean) is a Method
System.Reflection.AssemblyName GetName() is a Method
Int32 GetHashCode() is a Method
System.Reflection.Assembly GetAssembly(System.Type) is a Method
System.Type GetType(System.String, Boolean, Boolean) is a Method
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Dynamic Invocation&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Once you&#39;ve discovered a method, it is possible to invoke it using reflection. For example, you might like to invoke the Cos method of System.Math, which returns the cosine of an angle.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;To do so, you will get the Type information for the System.Math class, like so:&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Type theMathType = Type.GetType(&quot;System.Math&quot;);
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;With that type information, you can dynamically load an instance of that class.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Object theObj = Activator.CreateInstance(theMathType);
&lt;/code&gt;&lt;/pre&gt;
CreateInstance is a static method of the Activator class, which can be used to instantiate objects.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;With an instance of System.Math in hand, you can call the Cos method. To do so, you must prepare an array that will describe the types of the parameters. Since Cos takes a single parameter (the angle whose cosine you want) you need an array with a single member. Into that array you&#39;ll put a Type object for the System.Double type, which is the type of parameter expected by Cos.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Type[] paramTypes = new Type[1];
paramTypes[0]= Type.GetType(&quot;System.Double&quot;);
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You can now pass the name of the method you want and this array describing the types of the parameters to the GetMethod method of the type object retrieved earlier.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;MethodInfo CosineInfo = 
    theMathType.GetMethod(&quot;Cos&quot;,paramTypes);
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;You now have an object of type MethodInfo on which you can invoke the method. To do so, you must pass in the actual value of the parameters, again in an array.&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Object[] parameters = new Object[1];
parameters[0] = 45;
Object returnVal = CosineInfo.Invoke(theObj,parameters);
&lt;/code&gt;&lt;/pre&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Note that I&#39;ve created two arrays. The first, paramTypes, held the type of the parameters; the second, parameters, held the actual value. If the method had taken two arguments, you would have declared these arrays to hold two values. If the method took no values, you still would create the array, but you would give it a size of zero!&lt;br /&gt;&lt;pre style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; outline: 0px; padding: 0px;&quot;&gt;&lt;code style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px;&quot;&gt;Type[] paramTypes = new Type[0];
&lt;/code&gt;&lt;/pre&gt;
Odd as this looks, it is correct.&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/bb985627.aspx&quot; id=&quot;ctl00_MTContentSelector1_mainContentContainer_ctl17&quot; style=&quot;border: 0px; color: #0066dd; cursor: pointer; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none;&quot;&gt;Figure&amp;nbsp;11&lt;/a&gt;&amp;nbsp;shows the complete code.&lt;br /&gt;&lt;h3 style=&quot;border: 0px; clear: both; color: #3a3e43; font-family: &#39;Segoe UI Semibold&#39;, &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, Helvetica, sans-serif; font-size: 18px; font-style: inherit; line-height: 22px; margin: 3px 0px; outline: 0px; padding: 0px;&quot;&gt;
Conclusion&lt;/h3&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;While there are a number of subtle traps waiting for the unwary C++ programmer, the syntax of C# is not very different from C++ and the transition to the new language is fairly easy. The interesting part of working with C# is working your way through the new common language runtime library, which provides a host of functionality that previously had to be written by hand. This article could only touch on a few highlights. The CLR and the .NET Framework provide extensive support for threading, marshaling, Web application development, Windows-based application development, and so forth.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;The distinction between language features and CLR features is a bit blurry at times, but the combination is a very powerful development tool.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/271303975691535800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rizwanlone.blogspot.com/2013/11/c-c-what-you-need-to-know-to-move-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/271303975691535800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/271303975691535800'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/2013/11/c-c-what-you-need-to-know-to-move-from.html' title='C++ -&gt; C#: What You Need to Know to Move from C++ to C#'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1411082144549364087.post-5661534772310222701</id><published>2013-11-10T15:15:00.001+05:30</published><updated>2013-11-10T15:15:22.366+05:30</updated><title type='text'>How To Make a Wireless Network Secure???</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
When setting up a wireless network for your small business, it can be
 all too tempting to leave any security functions switched off. It may 
seem at the time that getting work done is much more important than 
worrying about a threat that probably won&#39;t ever materialise.&lt;br /&gt;
But 
small businesses, like all others, need to make sure their networks are 
secure. After all, your customers are counting on you to keep their 
confidential data safe.&lt;br /&gt;
The thing to realise is that your wireless
 network doesn&#39;t only extend within your premises. Wireless technologies
 provide long-range connectivity that cannot be restricted to the 
office, which means that anyone within range of an unsecured network can
 gain access.&lt;br /&gt;
This threatens more than just allowing others to use
 the internet for free. It could make you vulnerable to a breach of 
privacy, as hackers could monitor and intercept the open packets of data
 whizzing between devices and the router. Passwords, financial records, 
customer information and private data are all fair game to the criminal.&lt;br /&gt;
In
 addition, others may use your open wireless to access the internet for 
illegal activity. Should this happen you could find yourself involved in
 legal action, so it&#39;s well worth taking the necessary steps to ensure 
your network is reasonably secure. So here&#39;s what you can do.&lt;br /&gt;
&lt;h3&gt;
Use encryption&lt;/h3&gt;
Possibly
 the most important measure you can take to protect your network is to 
use encryption. Virtually all routers and wireless devices offer some 
form of encryption, which scrambles the data transmitted to and from 
your router, making your network&#39;s information unreadable to outsiders.&lt;br /&gt;
Encrypting
 a network involves creating a password or passphrase that is difficult 
to guess. But note here that, while there are different forms of 
encryption available to wireless networks, not all of them are secure.&lt;br /&gt;
&lt;strong&gt;WEP&lt;/strong&gt;The
 most basic and oldest form of wireless encryption to be commonly used 
is WEP (Wired Equivalency Privacy), which utilises passwords using 10 to
 58 digits using 0 to 9 and A to Z. &lt;br /&gt;
It is no longer considered 
secure and can be cracked in minutes by hackers using off-the-shelf 
hardware and software, but some older systems still only support WEP. If
 you have such a device, you may need to consider ditching it in favour 
of something else or lowering the level of security on the network.&lt;br /&gt;
While
 WEP should not be used to secure a network, it&#39;s still worth 
remembering that any encryption will provide more protection than none 
at all.&lt;br /&gt;
&lt;strong&gt;WPA and WPA2&lt;/strong&gt;Developed to overcome the
 weaknesses in WEP, WPA and WPA2 (Wi-Fi Protected Access) are the 
encryption modes now most widely used in wireless networks.&lt;br /&gt;
They 
use both passwords and passphrases to secure networks. A password is one
 group of letters, numbers and characters without spaces; a passphrase 
is a string of grouped characters that includes spaces, such as &quot;Th1S 1S
 a p@ssphr4s£&quot;. A passphrase is much harder to guess and break than a 
simple password.&lt;br /&gt;
&lt;h3&gt;
Use a firewall&lt;/h3&gt;
Hardware firewalls provide
 the first line of defence against attacks coming from outside of the 
network, and most routers have firewalls built into them, which check 
data coming into and going out and block any suspicious activity. The 
devices are usually set with reasonable defaults that ensure they do a 
decent job.&lt;br /&gt;
Most firewalls use packet filtering, which looks at 
the header of a packet to figure out its source and destination 
addresses. This information is compared to a set of predefined and/or 
user-created rules that govern whether the packet is legitimate or not, 
and thus whether it&#39;s to be allowed in or discarded.&lt;br /&gt;
Software 
firewalls usually run on the endpoint desktop or laptop, with the 
advantage of providing a better idea what network traffic is passing 
through the device. More than just which ports are being used and where 
data is going, it will know which applications are being used and can 
allow or block that program&#39;s ability to send and receive data.&lt;br /&gt;
If
 the software firewall isn&#39;t sure about a particular program it can ask 
the user what it should do before it blocks or allows traffic.&lt;br /&gt;
&lt;h3&gt;
Router settings&lt;/h3&gt;
&lt;strong&gt;Change the router&#39;s access name and password&lt;/strong&gt;&lt;br /&gt;It
 is all too easy to set up any equipment with its default settings, 
especially as the default admin name and password are often printed on 
the router itself to allow quick access and setup. This means that 
hackers will try these to access your network. Changing both access name
 and password will make it more difficult for a criminal to gain access.&lt;br /&gt;
&lt;strong&gt;Change the default network ID&lt;/strong&gt;&lt;br /&gt;Virtually
 all routers come with a default network ID supplied by the 
manufacturer. This can provide hackers with a little clue to the 
identity of the router and so helps them find weak spots more easily. 
Changing this usually means going to the router&#39;s security settings and 
amending the name there. Always keep a note of what the network ID is, 
and put that somewhere safe.&lt;br /&gt;
&lt;strong&gt;Stop your router broadcasting its network ID&lt;/strong&gt;&lt;br /&gt;When
 switched on, the wireless router will broadcast its network ID (or 
SSID). While this is useful in enabling connections between devices, 
once they are connected you can turn off the broadcast so the router 
operates in more of a stealth mode.&lt;br /&gt;
&lt;strong&gt;Enable MAC authentication for your users&lt;/strong&gt;&lt;br /&gt;You
 can limit who accesses your wireless network even further by only 
allowing certain devices to connect to it and barring the rest. Each 
wireless device will have a unique serial number known as a MAC address,
 and MAC authentication only allows access to the network from a set of 
addresses defined by the administrator. This prevents unauthorised 
devices from accessing network resources.&lt;br /&gt;
&lt;strong&gt;Create a separate wireless network for your customers.&lt;/strong&gt;&lt;br /&gt;The
 wireless network used by your employees should be used by them alone. 
If you have customers or contractors that need wireless access as well, 
you should consider creating a guest network. Most business-class 
routers allow you to do this, and it prevents outsiders from accessing 
your internal network assets while still allowing them connect to the 
internet. This virtual local area network enables employees and guests 
to have access while protecting your network from snoopers.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/5661534772310222701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rizwanlone.blogspot.com/2013/11/how-to-make-wireless-network-secure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/5661534772310222701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/5661534772310222701'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/2013/11/how-to-make-wireless-network-secure.html' title='How To Make a Wireless Network Secure???'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1411082144549364087.post-1195842794101764940</id><published>2013-05-29T23:02:00.002+05:30</published><updated>2013-05-29T23:02:27.106+05:30</updated><title type='text'>Application Lifecycle Management</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: tahoma,arial,helvetica,sans-serif; font-size: x-small;&quot;&gt;&lt;strong&gt;Application Lifecycle Management at a glance&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;

&lt;span style=&quot;font-family: tahoma,arial,helvetica,sans-serif; font-size: x-small;&quot;&gt;Welcome
 to Application Lifecycle Management, in this series of blog posts, I 
will illustrate the basics of Application Lifecycle Management including
 its benefits, history and building blocks. We shall talk about Agile 
methodology in general and how Agile strategies can enrich application 
lifecycle management.&lt;/span&gt;&lt;br /&gt;

&lt;span style=&quot;font-family: tahoma,arial,helvetica,sans-serif; font-size: x-small;&quot;&gt;This
 first blog post sets the stage and gives you an introduction to what 
ALM comprises. The second part will talk about the building blocks of 
ALM followed by part three which will talk about the tools used for 
implementing ALM. Part four introduces version control strategies that 
will help you streamline your development process. Finally, part five 
will discuss productive workspaces and how ALM can counteract the 
illusion of control by operating as a change enabler. After this series 
of blog posts, you’ll be ready to explore Agile strategies in more 
detail and learn how you can implement these strategies with the tools 
that Microsoft provides.&lt;/span&gt;&lt;br /&gt;

&lt;br /&gt;
&lt;span style=&quot;font-family: tahoma,arial,helvetica,sans-serif; font-size: x-small;&quot;&gt;&lt;strong&gt;Getting started with Application Lifecycle Management&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;font-family: tahoma,arial,helvetica,sans-serif; font-size: x-small;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: tahoma,arial,helvetica,sans-serif; font-size: x-small;&quot;&gt;This
 post is about Application Lifecycle Management (ALM) and brings 
together best of two worlds, Agile and ALM. We shall discuss ALM as a 
way to develop and release software in a coherent, integrated way, 
spanning all development phases, artifact types, roles and business 
units. Bringing ALM and Agile together and using the right tools leads 
to modern, efficient way of developing software. Consequently, you’ll 
reduce costs, boost your productivity, and accelerate your team’s 
collaboration. And you can make developing software a lot more fun. ALM 
is based on software configuration management (SCM). SCM&lt;/span&gt; &lt;span style=&quot;font-family: tahoma,arial,helvetica,sans-serif; font-size: x-small;&quot;&gt;in turn, is based on basic version control.&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/1195842794101764940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rizwanlone.blogspot.com/2013/05/application-lifecycle-management.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/1195842794101764940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/1195842794101764940'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/2013/05/application-lifecycle-management.html' title='Application Lifecycle Management'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1411082144549364087.post-8272451162644408594</id><published>2013-05-29T01:12:00.001+05:30</published><updated>2013-05-29T01:12:27.901+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="CSS3"/><title type='text'>CSS3 Modules</title><content type='html'>&lt;p&gt;&lt;b&gt;CSS3&lt;/b&gt; &lt;b&gt;Modules&lt;/b&gt;&lt;br&gt;
CSS3 is split up into &quot;&lt;i&gt;modules&lt;/i&gt;&quot;.&lt;br&gt;
The old specification has been split&lt;br&gt;
into smaller pieces, and new ones&lt;br&gt;
are also added.&lt;br&gt;
Some of the most important CSS3 modules are:&lt;br&gt;
&amp;#8226; Selectors&lt;br&gt;
&amp;#8226; Box Model&lt;br&gt;
&amp;#8226; Backgrounds and Borders&lt;br&gt;
&amp;#8226; Text Effects&lt;br&gt;
&amp;#8226; 2D/3D Transformations&lt;br&gt;
&amp;#8226; Animations&lt;br&gt;
&amp;#8226; Multiple Column Layout&lt;br&gt;
&amp;#8226;User Interface&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/8272451162644408594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rizwanlone.blogspot.com/2013/05/css3-modules.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/8272451162644408594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/8272451162644408594'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/2013/05/css3-modules.html' title='CSS3 Modules'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>Block A, Sector 1</georss:featurename><georss:point>28.587955 77.3109</georss:point></entry><entry><id>tag:blogger.com,1999:blog-1411082144549364087.post-5721866146333781482</id><published>2013-05-28T03:20:00.001+05:30</published><updated>2013-05-28T03:24:18.216+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET"/><title type='text'>ASP.NET</title><content type='html'>&lt;p&gt;ASP.NET is a new ASP generation. It&lt;br&gt;
is not compatible with Classic ASP,&lt;br&gt;
but ASP.NET may include Classic&lt;br&gt;
ASP.&lt;br&gt;
ASP.NET pages are compiled, which&lt;br&gt;
makes them faster than Classic&lt;br&gt;
ASP.&lt;br&gt;
ASP.NET has better language&lt;br&gt;
support, a large set of user&lt;br&gt;
controls, XML-based components,&lt;br&gt;
and integrated user authentication.&lt;br&gt;
ASP.NET pages have the&lt;br&gt;
extension .aspx, and are normally&lt;br&gt;
written in VB (Visual Basic) or C#&lt;br&gt;
(C sharp).&lt;br&gt;
User controls in ASP.NET can be&lt;br&gt;
written in different languages,&lt;br&gt;
including C++ and Java.&lt;br&gt;
When a browser requests an&lt;br&gt;
ASP.NET file, the ASP.NET engine&lt;br&gt;
reads the file, compiles and&lt;br&gt;
executes the scripts in the file, and&lt;br&gt;
returns the result to the browser as&lt;br&gt;
plain HTML.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/5721866146333781482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rizwanlone.blogspot.com/2013/05/aspnet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/5721866146333781482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/5721866146333781482'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/2013/05/aspnet.html' title='ASP.NET'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>A Block, Sector 14</georss:featurename><georss:point>28.587551 77.307076</georss:point></entry><entry><id>tag:blogger.com,1999:blog-1411082144549364087.post-1099825729675730754</id><published>2013-05-27T23:07:00.000+05:30</published><updated>2013-05-27T23:07:04.417+05:30</updated><title type='text'>HTML5 - New Elements</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; New Elements in HTML5&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The internet, and the use of the internet, has changed a lot since HTML 4.01 became a standard in 1999.&lt;br /&gt;&lt;br /&gt;Today, several elements in HTML 4.01 are obsolete, never used, or not used the way they were intended. All those elements are removed or re-written in HTML5.&lt;br /&gt;&lt;br /&gt;To better handle today&#39;s internet use, HTML5 also includes new elements for drawing graphics, adding media content, better page structure, better form handling, and several APIs to drag/drop elements, find Geolocation, include web storage, application cache, web workers, etc.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;The New Canvas Element&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; New Media Elements&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; New Form Elements&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; New Semantic/Structural Elements&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&amp;nbsp;HTML5 offers new elements for better structure: We will discuss all these elements in next article. &lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/1099825729675730754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rizwanlone.blogspot.com/2013/05/html5-new-elements.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/1099825729675730754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/1099825729675730754'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/2013/05/html5-new-elements.html' title='HTML5 - New Elements'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1411082144549364087.post-4642808120486854447</id><published>2013-05-27T23:03:00.001+05:30</published><updated>2013-05-27T23:03:11.125+05:30</updated><title type='text'>The Future Of Story Creater</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
A while ago we released a sample called Story Creator:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.msdn.microsoft.com/CSWP7AzureVideoStory-2b9c3e12&quot;&gt;Video Story&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
It
 combines several technologies, such as Windows Phone, Windows Azure, 
WCF, and C++. It is  a complete application that you can use and extend.
 But we&#39;re also aware of some limitations. For example, it is based on 
Windows Phone 7.0, not the latest Mango release. It doesn&#39;t offer too 
many features. However, do not worry. We don&#39;t stop here. We want to 
continue to improve it, and provide more features.&lt;br /&gt;
In this blog 
post, I&#39;ll outline several potential features that may come in a future 
release. Note I&#39;m not promising anything here. This is just what we&#39;re 
trying to do.&lt;br /&gt;
The focuses on the next release are:&lt;br /&gt;
* Upgrade to Windows Phone 7.1&lt;br /&gt;
* Create a Windows 8 XAML version of the client application, using .NET (not C++)&lt;br /&gt;
* Create a Windows 8 HTML version of the client application&lt;br /&gt;
* Port the C++ native video encoding component (used in the worker role) to a custom WinRT component&lt;br /&gt;
* Add some new features, such as caption text for each photo, and secondary tiles integration with Windows Phone/Windows 8&lt;br /&gt;
* Fix bugs&lt;br /&gt;
* Refactor code&lt;br /&gt;
Starting
 from now, I&#39;ll try to write some blog posts about how we implement 
those new features. As soon as a sample application gets a little 
bigger, it is difficult to see how it works without documentations. 
These blog posts reflect the work I&#39;m doing. But they may not directly 
reflect what the final sample application will be. In addition, I&#39;m also
 learning. Ther&#39;re a lot of new technologies, and I think I still have a
 lot to learn about programming best practices. So bare with me if you 
see something that may not be a best practice. I&#39;ll be very appreciated 
if you can point out problems in these blog posts.&lt;br /&gt;
What&#39;s more, 
some of the blog posts may contain project attachments. These projects 
are NOT samples, but rather prototypes. Sometimes I&#39;m unsure how to 
proceed to implement a certain feature, so I write prototypes before 
actually implementing it. The prototypes should in general work fine. 
But if you want to use them in your production code, you should check 
carefully to make sure they don&#39;t contain bugs, security issues, and 
performance is fine.&lt;br /&gt;
Finally, I don&#39;t know how many blog posts I 
will be writing. After all, this  sample is a side project. Usually I 
can only spend my spare time on it.&lt;br /&gt;
If you have any suggestions, feel free to leave comments on the blog posts.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://rizwanlone.blogspot.com/feeds/4642808120486854447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rizwanlone.blogspot.com/2013/05/the-future-of-story-creater.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/4642808120486854447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1411082144549364087/posts/default/4642808120486854447'/><link rel='alternate' type='text/html' href='http://rizwanlone.blogspot.com/2013/05/the-future-of-story-creater.html' title='The Future Of Story Creater'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/10706166044793186178</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>