The code in all articles is C#-based, as that's the background I come from. Many of the concepts in the C# articles will be applicable to other .NET languages, but there may be some wrinkles which are C#-specific. The framework articles should be more language-agnostic, even though they are couched in C# terms.
I have a book called C# in Depth, published by Manning. Hopefully if you find these articles useful, you'll find the book handy too. The third edition covers C# 2-5.
I have a blog about C#, Java and other technologies. Many posts in the blog may well end up as full-blown articles. Think of it as a sort of incubator - somewhere to jot down interesting ideas and questions which should really have a thorough explanation some time.
| Articles on the C# in Depth web site | |
|---|---|
| Iterator block implementation | Details about what the C# compiler does on your behalf to build state machines from iterator blocks |
| Iterators, iterator blocks and data pipelines | A close look at why iterators are at the heart of LINQ to Objects, and how iterator blocks make them easy to implement |
| The Beauty of Closures | A brief explanation of why closures are neat, and what they look like in C# and Java |
| Why Properties Matter | Reasons for making every field private, and exposing state via properties |
| C# articles | |
| C# 2.0 | A guide to the features introduced in C# 2.0 |
| Parameter passing | A detailed explanation of the difference between default/ref/out parameters. |
| Delegates and events
(Now on csharpindepth.com) |
An explanation of delegates and events, the difference between them, and the support C# gives for them. |
| Implementing
the singleton pattern (Now on csharpindepth.com) |
A comparison of different singleton pattern implentations. |
| Constructors | An detailed explanation of constructors, with reference to the language specification. |
| C# Brainteasers | A collection of brainteasers in C#. |
| C#
and beforefieldinit
(Now on csharpindepth.com) |
Discussion of some surprising behaviour with respect to static constructors. |
| Framework/library articles | |
| Generic operators | How to perform mathematical operations (addition, subtraction etc) in a generic way, using .NET 3.5 expression trees. |
| Concatenating Strings Efficiently | When to use StringBuilder, and when not to. |
| Exceptions and Performance Redux (original version) |
Just how expensive are exceptions anyway? |
| Strings
in .NET (Now on csharpindepth.com) |
Some explanations about the behaviour System.String type. |
| Multi-threading in .NET | A fairly long article giving most of the information I know about multi-threading in the .NET environment. |
| Reading binary data | Some "do"s and "don't"s regarding reading binary data from a stream. |
| Unicode (Now on csharpindepth.com) |
An introduction to the murky world of Unicode and character encodings. |
| Debugging Unicode Problems
(Now on csharpindepth.com) |
What to do when things go wrong with character data. |
| Memory in .NET - what goes where | A brief explanation of where data ends up in .NET. |
| Binary floating point basics | An introduction to the perils of floating point arithmetic, and some details of the .NET binary floating point types. |
| Decimal floating point basics | Following on from the previous article, this talks about the .NET System.Decimal type. |
| Plug-ins and cast exceptions | A guide to avoiding casting exceptions when writing plug-in frameworks. |
| Miscellaneous articles | |
| Debugging tips | Hints and tips about the process of finding and fixing bugs |
| Short but complete programs | A description of what I'm after when I ask newsgroup posters for short but complete programs demonstrating their problems. |
| Obfuscation and Decompilation | An article about my view on how serious (or not) the problem of decompilation is. |
| Job postings on newsgroups | Why recruiters should stay out of technical newsgroups. |
| Code and Libraries | |
| Miscellaneous Utilities | A library of little bits and bobs to make life easier. |
| EBCDIC encoding | A discussion of IBM's EBCDIC character encoding, and a library to help developers to use it in .NET. |
| Simple micro-benchmarking in C# | A simple way to benchmark small portions of C# code. |
| Important links | |
| The C# 1.0 Language Specification | Jon Jagger's hyperlinked version of the ECMA specification. Essential reading for details of C# semantics. |
| The C# 3.0 Language Specification | The current version of the C# language specification, in Word format |
| Microsoft's naming conventions | Even if you don't follow them, it's worth knowing about them. |