15 March 2008

Sharpening My C

by mo

I recently finished reading…

C# 3.0 in a Nutshell: A Desktop Quick Reference (In a Nutshell (O'Reilly))
by Joseph Albahari, Ben Albahari

Read more about this title...

My desire to read this book was to understand what new language features C# 3.0 brings to the table. This book started to explain the C# language right from the very beginning up until now. So some of it was a great refresher and some of it was quite boring. It not only covers the new language features but covers several areas of the framework class libraries and new lib’s that came with the .NET 3.5 stack.

I was hoping to find my coverage on the new language features to see different usages for things like extension methods and lambda’s to try to get a sense for what I like and don’t like. So far I’m not really a fan of the new query comprehension syntax. It’s to SQL-ish for me… I prefer working directly against methods. But I might have to give it some time… enough ranting here’s some of the things I’ve learned.

Lambda Expressions

There’s tonnes, and tonnes of discussion on this topic right now. I love how it’s so much cleaner, and less verbose then anonymous delegates, but I see potential room for abuse. IMHO seeing lambda’s tossed around all over your code base is no better then over using anonymous delegates. I love the new ideas that lambda’s bring though…

"A lambda expression is an unnamed method written in place of a delegate instance. The compiler immediately converts the lambda expression to either:

  • A delegate instance.
  • An expression tree, of type Expression<T>, representing the code inside the lambda expression in a traversable object model. This allows the lambda expression to be interpreted later at runtime…" - C# 3.0 in a Nutshell

I love the idea of building up an expression tree of delegates that chain together to solve an equation. One of the ideas I’m working on is understanding how to leverage an expression tree of lambdas to solve trivial mathematical equations. Then possible traversing through the structure with a visitor to build out a display friendly version of the equation.


"The benefits of WPF are as follows:

  • It supports sophisticated graphics, such as arbitrary transformations, 3D rendering, and true transparency.
  • Its primary measurement unit is not pixel-based, so applications display correctly in any DPI
  • It has extensive dynamic layout support, which means you can localize any application without danger of elements overlapping.
  • Rendering uses DirectX and is fast, taking good advantage of graphics hardware acceleration.
  • User interfaces can be described declaratively in XAML files that can be maintained independently of the "code-behind" files - this helps to separate appearance from functionality." - C# 3.0 in a Nutshell


"WCF is the communication infrastructure new to Framework 3.0. WCF is flexible and configurable enough to make both of its predecessors - Remoting and (.ASMX) Web Services - mostly redundant." - C# 3.0 in a Nutshell


"If you’re dealing with data that’s originated from or destined for an XML file, XmlConvert (the System.Xml namespace) provides the most suitable methods for formatting and parsing. The methods in XmlConvert handle the nuances of XML formatting without needing special format strings." - C# 3.0 in a Nutshell


"The compiler, upon parsing the yield return statement, writes ‘behind the scenes,’ a hidden nested enumerator class, and then refactors GetEnumerator to instantiate and return that class. Iterators are powerful and simple" - C# 3.0 in a Nutshell

Hash Tables

"Its underlying hashtable works by converting each element’ key into an integer hashcode - a pseudo unique value - and then applying an algorithm to convert the hashcode into a hash key. This hash key is used internally to determine which ‘bucket’ an entry belongs to. If the bucket contains more than one value, a linear search is performed on the bucket. A hashtable typically starts out maintaining a 1:1 ration of buckets to values, meaning that each bucket contains only one value. However, as more items are added to the hashtable, the load factor dynamically increases, in a manner designed to optimize insertion and retrieval performance as well as memory requirements." - C# 3.0 in a Nutshell


"The data contract serializer is the newest and the most versatile of the three serializatoin engines and is used by WCF. The serializer is particularly strong in two scenarios:

  • When exchanging information through standards-compliant messaging protocols
  • When you need high-version tolerance plus the option of preserving object references."

C# 3.0 in a Nutshell


"A Mutex is like a C# lock, but it can work across multiple processes. In other words, Mutex can be computer-wide as well as application-wide" - C# 3.0 in a Nutshell

"A Semaphore is like a nightclub: it has a certain capacity, enforced by a bouncer. Once it’s full, no more people can enter and a queue build up outside. Then, for each person that leaves, one person enters from the head of the queue." - C# 3.0 in a Nutshell

"The Thread class provides GetData and SetData methods for storing nontransient isolated data in ‘slots’ whose values persist between method calls." - C# 3.0 in a Nutshell

books csharp