<?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: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-2084425469101093947</id><updated>2011-11-27T17:37:08.008-08:00</updated><category term='var'/><category term='c#'/><category term='object initializer'/><category term='implicitly types variables'/><category term='Performance'/><category term='c# 3.0'/><category term='extension methods'/><category term='c# 3.0 features'/><category term='.Net'/><title type='text'>Just Another Teq Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://teqilite.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2084425469101093947/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://teqilite.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ghanshyam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2084425469101093947.post-4086338676723266838</id><published>2008-05-13T06:58:00.000-07:00</published><updated>2008-05-23T15:58:38.529-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='object initializer'/><category scheme='http://www.blogger.com/atom/ns#' term='extension methods'/><category scheme='http://www.blogger.com/atom/ns#' term='c# 3.0 features'/><category scheme='http://www.blogger.com/atom/ns#' term='c# 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='var'/><category scheme='http://www.blogger.com/atom/ns#' term='implicitly types variables'/><title type='text'>New Features in c# 3.0 (.Net 3.5) contd...</title><content type='html'>I started writing in my previous blog about new features in C# 3.0 which is part of .Net 3.5 framework now.&lt;br /&gt;These new features are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Implicitly Typed Local Variables and Arrays&lt;/li&gt;&lt;li&gt;Extension Methods&lt;/li&gt;&lt;li&gt;Object Initializers&lt;/li&gt;&lt;li&gt;Collection Initializers&lt;/li&gt;&lt;li&gt;Anonymous Types&lt;/li&gt;&lt;li&gt;Auto Implemented Properties&lt;/li&gt;&lt;li&gt;Lambda Expressions&lt;/li&gt;&lt;li&gt;Query Keywords&lt;/li&gt;&lt;li&gt;Partial Method definitions&lt;/li&gt;&lt;/ol&gt;Of these, I have written about 1st two in wordpress blog (&lt;a href="http://teqilite.wordpress.com/"&gt;can be found here&lt;/a&gt;).&lt;br /&gt;Current post will be continuation of that...&lt;br /&gt;&lt;br /&gt;&lt;ol start="3"&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Object Initializers&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;If you remember, in order to initialize an object, the constructor was required to be called.&lt;br /&gt;Any properties required were to be set explicity after instantiating the object.&lt;br /&gt;C# 3.0 simplified object initialization by combining these 2 steps.&lt;br /&gt;&lt;br /&gt;Let's assume there is a class "Product".&lt;br /&gt;Usual way,&lt;br /&gt;&lt;blockquote class="csharpcode"&gt;Product p = &lt;span class="kwrd"&gt;new&lt;/span&gt; Product(&lt;span class="str"&gt;"product_id1"&lt;/span&gt;);&lt;br /&gt;p.Name = &lt;span class="str"&gt;"Blackberry"&lt;/span&gt;;&lt;br /&gt;p.Price = 30000;&lt;/blockquote&gt;In C# 3.0,&lt;br /&gt;&lt;blockquote class="csharpcode"&gt;Product p = &lt;span class="kwrd"&gt;new&lt;/span&gt; Product(&lt;span class="str"&gt;"product_id1"&lt;/span&gt;) {Name = &lt;span class="str"&gt;"Blackberry"&lt;/span&gt;, Price = 30000};&lt;/blockquote&gt;          or for default constructor,&lt;br /&gt;&lt;blockquote class="csharpcode"&gt;Product p = &lt;span class="kwrd"&gt;new&lt;/span&gt; Product {Name = &lt;span class="str"&gt;"Blackberry"&lt;/span&gt;, Price = 30000};&lt;/blockquote&gt;&lt;br /&gt;For development and readability also, this really looks cool&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No need to provide and call many overloaded constructors, saves coding space n time.&lt;/li&gt;&lt;li&gt;this statement says "Create a new Product object with these these properties/attributes set to these values", which only adds to object oriented concept in programming.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;We can also use implicitly types variable here (not of any use though):&lt;br /&gt;&lt;blockquote class="csharpcode"&gt;var p = &lt;span class="kwrd"&gt;new&lt;/span&gt; Product(&lt;span class="str"&gt;"product_id1"&lt;/span&gt;) {Name = &lt;span class="str"&gt;"Blackberry"&lt;/span&gt;, Price = 30000};&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol start="4"&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Collection Initializers&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Collections can be initialized with an initialization list and not needing to call Add or similar methods.&lt;br /&gt;for example,&lt;br /&gt;&lt;blockquote class="csharpcode"&gt;&lt;pre&gt;List&amp;lt;int&amp;gt; numbers = new List&amp;lt;int&amp;gt;{1, 2, 3, 4, 5, 5+1, 7};&lt;br /&gt;&lt;br /&gt;List&amp;lt;product&amp;gt; products = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;product&amp;gt;&lt;br /&gt;{&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;new&lt;/span&gt; Product {Name = &lt;span class="str"&gt;"Blackberry"&lt;/span&gt;, Price = 30000},&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;new&lt;/span&gt; Product {Name = &lt;span class="str"&gt;"iPod"&lt;/span&gt;, Price = 22000}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;This will let you add anything that the collection's Add method allows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol start="5"&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Anonymous Types&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Anonymous Types are types without any name and are defined and used on the fly.&lt;br /&gt;Just like we had anonymous methods prior to this version, where one can quickly define method body and use for a method delegate, Anonymous Types do not have any name but read/write properties. "new" operator followed by the anonymous type declaration is used to declare and instantiate an anonymous type.&lt;br /&gt;&lt;br /&gt;for example, suppose we need a product object which essential has name and price.&lt;br /&gt;&lt;blockquote class="csharpcode"&gt;var product1 = &lt;span class="kwrd"&gt;new&lt;/span&gt; {Name = &lt;span class="str"&gt;"Blackberry"&lt;/span&gt;, Price = 30000};&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;We can access product1.Name and product1.Price properties just like any named type.&lt;br /&gt;Two such anonymous types are considered same if they have same Properties defined (considering the order as well). Internally, compiler creates one anonymous type for such 2 declarations.&lt;br /&gt;&lt;br /&gt;Combining this knowledge with collection initializer, let's create a collection of anonymous type objects (as defined above).&lt;br /&gt;&lt;blockquote class="csharpcode"&gt;&lt;pre&gt;List&amp;lt;product&amp;gt; products = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;product&amp;gt;&lt;br /&gt;{&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;new&lt;/span&gt; {Name = &lt;span class="str"&gt;"Blackberry"&lt;/span&gt;, Price = 30000},&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;new&lt;/span&gt; {Name = &lt;span class="str"&gt;"iPod"&lt;/span&gt;, Price = 22000}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol start="6"&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Auto Implemented Properties&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;When we need to create a dumb object model, many a times we create properties which just act as wrapper around fields and so the field declarations are also needed to be defined which is obvious to be there. This situation is simplified in c# 3.0 where only an abstract property with get and set _both_ has to be defined but without the "abstract" keyword ofcourse. Compiler takes care of generating the backing fields internally.&lt;br /&gt;&lt;br /&gt;for example, let's say we need to define a "Employee" class.&lt;br /&gt;The usual way,&lt;br /&gt;&lt;blockquote class="csharpcode"&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Employee&lt;br /&gt;{&lt;br /&gt;&lt;span class="kwrd"&gt;   string&lt;/span&gt; name;&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt; salary;&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; designation;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span&gt;&lt;span class="kwrd"&gt;  &lt;/span&gt;&lt;/span&gt;get { &lt;span class="kwrd"&gt;return&lt;/span&gt; name; }&lt;br /&gt; &lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;set { name = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;}&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Salary&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;{&lt;br /&gt; &lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;get { &lt;span class="kwrd"&gt;return&lt;/span&gt; salary; }&lt;br /&gt;    set { salary = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;}&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Designation&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;{&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;get { &lt;span class="kwrd"&gt;return&lt;/span&gt; designation; }&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="kwrd"&gt;  &lt;/span&gt;&lt;/span&gt;set { designation = &lt;span class="kwrd"&gt;value&lt;/span&gt;; }&lt;br /&gt;&lt;span&gt;&lt;span class="kwrd"&gt;   &lt;/span&gt;&lt;/span&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;All we bother about is get/set properties. The extra code for the corresponding fields declarations and getter/setter implementation looks implicit but was mandatory to write that has really become implicit in C# 3.0.&lt;br /&gt;So, now the code looks like:&lt;br /&gt;&lt;blockquote class="csharpcode"&gt;&lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Employee&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; Salary { get; set; }&lt;br /&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Designation { get; set; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Life easy!!!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;continued...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2084425469101093947-4086338676723266838?l=teqilite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teqilite.blogspot.com/feeds/4086338676723266838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2084425469101093947&amp;postID=4086338676723266838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2084425469101093947/posts/default/4086338676723266838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2084425469101093947/posts/default/4086338676723266838'/><link rel='alternate' type='text/html' href='http://teqilite.blogspot.com/2008/05/new-features-in-c-30-net-35-contd.html' title='New Features in c# 3.0 (.Net 3.5) contd...'/><author><name>ghanshyam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2084425469101093947.post-4945429286874008525</id><published>2008-05-09T06:47:00.000-07:00</published><updated>2008-05-09T08:39:15.544-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c# 3.0 features'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Previous Blogs related to .Net (C#)</title><content type='html'>Links to my previous blogs:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://teqilite.wordpress.com/category/performance/"&gt;Performance issues in .Net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://teqilite.wordpress.com/"&gt;New features in C# 3.0&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2084425469101093947-4945429286874008525?l=teqilite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teqilite.blogspot.com/feeds/4945429286874008525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2084425469101093947&amp;postID=4945429286874008525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2084425469101093947/posts/default/4945429286874008525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2084425469101093947/posts/default/4945429286874008525'/><link rel='alternate' type='text/html' href='http://teqilite.blogspot.com/2008/05/previous-blogs-related-to-net-c.html' title='Previous Blogs related to .Net (C#)'/><author><name>ghanshyam</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
